Delen via


Compilerwaarschuwingen die standaard zijn uitgeschakeld

De compiler ondersteunt waarschuwingen die standaard zijn uitgeschakeld, omdat de meeste ontwikkelaars ze niet nuttig vinden. In sommige gevallen waarschuwen ze voor een stijlkeuze of over veelvoorkomende idiomen in oudere code. Andere waarschuwingen gaan over het gebruik van een Microsoft-extensie voor de taal. Sommige waarschuwingen geven een gebied aan waar programmeurs vaak onjuiste veronderstellingen maken, wat kan leiden tot onverwacht of niet-gedefinieerd gedrag. Als al deze waarschuwingen zijn ingeschakeld, kunnen sommige hiervan vaak worden weergegeven in bibliotheekheaders. De C-runtimebibliotheken en de C++-standaardbibliotheken zijn bedoeld om geen waarschuwingen alleen op waarschuwingsniveau /W4te verzenden.

Waarschuwingen inschakelen die standaard zijn uitgeschakeld

U kunt waarschuwingen inschakelen die normaal gesproken standaard zijn uitgeschakeld met behulp van een van de volgende opties:

  • #pragma warning(default : warning_number)

    De opgegeven waarschuwing (warning_number) is ingeschakeld op het standaardniveau. Documentatie voor de waarschuwing bevat het standaardniveau van de waarschuwing.

  • #pragma warning( : warning_levelwarning_number)

    De opgegeven waarschuwing (warning_number) is ingeschakeld op het opgegeven niveau (warning_level).

  • /Wall

    /Wall schakelt alle waarschuwingen in die standaard zijn uitgeschakeld. Als u deze optie gebruikt, kunt u afzonderlijke waarschuwingen uitschakelen met behulp van de /wd optie.

  • /wL nnnn

    Met deze optie schakelt u waarschuwing nnnn in op niveau L.

Waarschuwingen die standaard zijn uitgeschakeld

Visual Studio 2015 en latere versies

De volgende waarschuwingen zijn standaard uitgeschakeld in Visual Studio 2015 en nieuwere versies:

Waarschuwing Bericht
C4061 (niveau 4) enumerator 'identifier' in een switch van opsomming 'opsomming' wordt niet expliciet verwerkt door een caselabel.
C4062 (niveau 4) enumerator 'identifier' in een switch van opsomming 'opsomming' wordt niet verwerkt.
C4165 (niveau 1) "HRESULT" wordt geconverteerd naar "bool"; Weet u zeker dat dit wat u wilt?
C4191 (niveau 3) operator: onveilige conversie van 'type_of_expression' naar 'type_required'
C4242 (niveau 4) 'id': conversie van 'type1' naar 'type2', mogelijk verlies van gegevens
C4254 (niveau 4) operator: conversie van 'type1' naar 'type2', mogelijk verlies van gegevens
C4255 (niveau 4) 'functie': geen functieprototype gegeven: converteren '()' naar '(void)'
C4263 (niveau 4) 'functie': lidfunctie overschrijft geen virtuele lidfunctie van de basisklasse
C4264 (niveau 1) "virtual_function": er is geen onderdrukking beschikbaar voor de functie van een virtueel lid van de basisklasse; functie is verborgen
C4265 (niveau 3) 'klasse': klasse heeft virtuele functies, maar destructor is niet virtueel
C4266 (niveau 4) "functie": er is geen onderdrukking beschikbaar voor de virtuele lidfunctie van het basistype; functie is verborgen
C4287 (niveau 3) 'operator': ongetekende/negatieve constante verkeerde combinatie
C4289 (niveau 4) niet-standaardextensie gebruikt: 'var': lusbesturingsvariabele die in de for-lus is gedeclareerd, wordt buiten het bereik voor lus gebruikt
C4296 (niveau 4) operator: expressie is altijd onwaar
C4339 (niveau 4) 'type': het gebruik van niet-gedefinieerd type dat is gedetecteerd in CLR-metagegevens - het gebruik van dit type kan leiden tot een runtime-uitzondering
C4342 (niveau 1) gedragswijziging: 'functie' aangeroepen, maar een lidoperator werd in eerdere versies aangeroepen.
C4350 (niveau 1) gedragswijziging: 'lid1' aangeroepen in plaats van 'lid2'
C4355 'this' : gebruikt in de initialisatielijst van basisleden
C4365 (niveau 4) 'action': conversie van 'type_1' naar 'type_2', ondertekend/niet-ondertekend komt niet overeen
C4370 (niveau 3) de indeling van de klasse is gewijzigd van een eerdere versie van de compiler vanwege een betere verpakking
C4371 (niveau 3) 'klassenaam': de indeling van de klasse kan zijn gewijzigd van een eerdere versie van de compiler vanwege een betere verpakking van lid 'lid'
C4388 (niveau 4) niet-ondertekende/niet-ondertekende overeenkomst
C4412 (niveau 2) 'functie': functiehandtekening bevat het type 'type'; C++-objecten zijn onveilig om door te geven tussen pure code en gemengd of systeemeigen
C4426 (niveau 1) optimalisatievlagmen zijn gewijzigd na het opnemen van headers, kunnen worden veroorzaakt door #pragma optimize() 14.1
C4435 (niveau 4) 'klasse1': Objectindeling onder /vd2 wordt gewijzigd vanwege virtuele basis 'klasse2'.
C4437 (niveau 4) dynamic_cast van virtuele basis 'class1' naar 'class2' kan in sommige contexten mislukken.
C4444 (niveau 3) '__unaligned' op het hoogste niveau wordt in deze context niet geïmplementeerd.
C4464 (niveau 4) het relatieve include-pad bevat ..
C4471 (niveau 4) een doorstuurdeclaratie van een niet-gescoopte opsomming moet een onderliggend type (int verondersteld) Perm hebben
C4472 (niveau 1) 'id' is een systeemeigen opsomming: voeg een toegangsaanduiding (privé/openbaar) toe om een beheerde enum te declareren
C4514 (niveau 4) 'functie': de inlinefunctie is niet-deductie verwijderd
C4536 (niveau 4) 'typenaam': de typenaam overschrijdt de limiet voor metagegevens van 'limiet' tekens
C4545 (niveau 1) expressie voordat komma resulteert in een functie die ontbreekt in een lijst met argumenten
C4546 (niveau 1) functieoproep vóór lijst met ontbrekende argumenten voor komma's
C4547 (niveau 1) "operator": operator voordat komma geen effect heeft; verwachte operator met neveneffect
C4548 (niveau 1) expressie voordat komma geen effect heeft; verwachte expressie met neveneffect
C4549 (niveau 1) "operator1": operator voordat komma geen effect heeft; Was u van plan 'operator2' te maken?
C4555 (niveau 1) expressie heeft geen effect; verwachte expressie met neveneffect
C4557 (niveau 3) '__assume' bevat effect 'effect'
C4571 (niveau 4) informatief: catch(...) semantiek is gewijzigd sinds Visual C++ 7.1; gestructureerde uitzonderingen (SEH) worden niet meer gevangen
C4574 (niveau 4) 'id' is gedefinieerd als '0': wilde u '#if id' gebruiken?
C4577 (niveau 1) 'noexcept' wordt gebruikt zonder opgegeven uitzonderingsafhandelingsmodus; beëindiging op uitzondering is niet gegarandeerd. Specificeren /EHsc
C4582 (niveau 4) 'type': constructor wordt niet impliciet aangeroepen
C4583 (niveau 4) 'type': destructor wordt niet impliciet aangeroepen
C4587 (niveau 1) 'anonymous_structure': gedragswijziging: constructor wordt niet meer impliciet aangeroepen
C4588 (niveau 1) 'anonymous_structure': gedragswijziging: destructor wordt niet meer impliciet aangeroepen
C4596 (niveau 4) "id": ongeldige gekwalificeerde naam in liddeclaratie 14.3Perm
C4598 (niveau 1 en niveau 3) "#include "header": koptekstnummer in de vooraf gecompileerde header komt niet overeen met de huidige compilatie op die positie 14.3
C4599 (niveau 3) 'optiepad': opdrachtregelargumentnummer arg_number komt niet overeen met vooraf gecompileerde header 14.3
C4605 (niveau 1) '/D-macro' die is opgegeven op de huidige opdrachtregel, maar niet is opgegeven toen vooraf gecompileerde header werd gebouwd
C4608 (niveau 3) 'union_member' is al geïnitialiseerd door een ander unionlid in de initialisatielijst, 'union_member' Perm
C4619 (niveau 3) #pragma waarschuwing: er is geen waarschuwingsnummer 'getal'
C4623 (niveau 4) 'afgeleide klasse': de standaardconstructor kan niet worden gegenereerd omdat een standaardconstructor van de basisklasse niet toegankelijk is
C4625 (niveau 4) 'afgeleide klasse': de kopieerconstructor kan niet worden gegenereerd omdat een constructor voor het kopiëren van basisklassen niet toegankelijk is
C4626 (niveau 4) 'afgeleide klasse': toewijzingsoperator kan niet worden gegenereerd omdat een operator voor basisklassetoewijzing niet toegankelijk is
C4628 (niveau 1) digraphs worden niet ondersteund met -Ze. Tekenreeks 'digraph' niet geïnterpreteerd als alternatief token voor 'char'
C4640 (niveau 3) 'exemplaar': constructie van lokaal statisch object is niet thread-safe
C4643 (niveau 4) Het doorsturen van 'id' in naamruimte std is niet toegestaan door de C++ Standard. 15.8
C4647 (niveau 3) gedragswijziging: __is_pod(type) heeft een andere waarde in eerdere versies
C4654 (niveau 4) Code die vóór het opnemen van vooraf gecompileerde headerregel wordt geplaatst, wordt genegeerd. Voeg code toe aan de vooraf gecompileerde header. 14.1
C4668 (niveau 4) 'symbool' is niet gedefinieerd als een preprocessormacro, waarbij '0' wordt vervangen door 'instructies'
C4682 (niveau 4) 'symbool': geen opgegeven parameterkenmerk, standaard ingesteld op [in]
C4686 (niveau 3) 'door de gebruiker gedefinieerd type': mogelijke verandering in gedrag, wijziging in UDT retouraanroepconventie
C4692 (niveau 1) 'functie': handtekening van niet-privélid bevat assemblyeigen type 'native_type'
C4710 (niveau 4) 'functie': functie niet inlined
C4738 (niveau 3) het opslaan van 32-bits float resulteert in geheugen, mogelijk verlies van prestaties
C4746 vluchtige toegang van 'expressie' is onderhevig aan /volatile:<iso|ms-instelling> ; overweeg om intrinsieke functies van __iso_volatile_load/store te gebruiken
C4749 (niveau 4) voorwaardelijk ondersteund: offsetof toegepast op niet-standaardindelingstype 'type'
C4767 (niveau 4) de sectienaam 'symbool' is langer dan 8 tekens en wordt afgekapt door de linker
C4774 (niveau 4) 'tekenreeks': de tekenreeks die wordt verwacht in argumentnummer is geen letterlijke tekenreeks
C4777 (niveau 4) 'functie': notatietekenreeks 'tekenreeks' vereist een argument van het type 'type1', maar variadic argumentnummer heeft het type 'type2'
C4786 (niveau 3) 'symbool': objectnaam is afgekapt tot 'getal' tekens in de foutopsporingsgegevens
C4800 (niveau 4) Impliciete conversie van 'type' naar bool. Mogelijke informatieverlies 16.0
C4820 (niveau 4) 'bytes' bytes opvulling toegevoegd na de constructie 'member_name'
C4822 (niveau 1) Lid: de functie lokaal klasselid heeft geen hoofdtekst
C4826 (niveau 2) De conversie van 'type1' naar 'type2' is uitgebreid. Dit kan onverwacht runtimegedrag veroorzaken.
C4837 (niveau 4) trigraph gedetecteerd: '??character' vervangen door 'character'
C4841 (niveau 4) niet-standaarduitbreiding gebruikt: samengesteld lid designator gebruikt in offsetof
C4842 (niveau 4) het resultaat van 'offsetof' toegepast op een type dat meerdere overnames gebruikt, is niet gegarandeerd consistent tussen compilerreleases
C4866 (niveau 4) 'file(line-number)'-compiler dwingt mogelijk geen evaluatievolgorde van links naar rechts af voor aanroep naar operator
C4868 (niveau 4) 'file(line_number)'-compiler dwingt mogelijk geen evaluatievolgorde van links naar rechts af in de lijst met accolades voor initialisatie
C4905 (niveau 1) wide string literal cast to 'LPSTR'
C4906 (niveau 1) letterlijke tekenreeks cast naar LPWSTR
C4917 (niveau 1) 'declarator': een GUID kan alleen worden gekoppeld aan een klasse, interface of naamruimte
C4928 (niveau 1) illegale copy-initialisatie; meer dan één door de gebruiker gedefinieerde conversie is impliciet toegepast
C4931 (niveau 4) ervan uitgaande dat de typebibliotheek is gebouwd voor nummer-bits aanwijzers
C4946 (niveau 1) reinterpret_cast gebruikt tussen gerelateerde klassen: 'class1' en 'class2'
C4962 'functie': profielgestuurde optimalisaties uitgeschakeld omdat optimalisaties ertoe hebben geleid dat profielgegevens inconsistent worden
C4986 (niveau 4) 'symbool': uitzonderingsspecificatie komt niet overeen met de vorige declaratie
C4987 (niveau 4) niet-standaardextensie gebruikt: 'throw (...)'
C4988 (niveau 4) 'symbool': variabele die buiten klasse/functiebereik is gedeclareerd
C5022 'type': meerdere verplaatsingsconstructors opgegeven
C5023 'type': meerdere operatoren voor verplaatsingstoewijzingen opgegeven
C5024 (niveau 4) 'type': de verplaatsingsconstructor is impliciet gedefinieerd als verwijderd
C5025 (niveau 4) 'type': de toewijzingsoperator voor verplaatsen is impliciet gedefinieerd als verwijderd
C5026 (niveau 1 en niveau 4) 'type': de verplaatsingsconstructor is impliciet gedefinieerd als verwijderd
C5027 (niveau 1 en niveau 4) 'type': de toewijzingsoperator voor verplaatsen is impliciet gedefinieerd als verwijderd
C5029 (niveau 4) niet-standaardextensie gebruikt: uitlijningskenmerken in C++ zijn alleen van toepassing op variabelen, gegevensleden en tagtypen
C5031 (niveau 4) #pragma waarschuwing (pop): waarschijnlijk niet overeenkomende, popping-waarschuwingsstatus gepusht in een ander bestand 14.1
C5032 (niveau 4) gedetecteerd #pragma waarschuwing(push) zonder bijbehorende #pragma waarschuwing (pop) 14.1

Visual Studio 2017 en latere versies

De volgende waarschuwingen zijn standaard uitgeschakeld in Visual Studio 2017 en nieuwere versies:

Waarschuwing Bericht
C5034 het gebruik van intrinsiek 'intrinsiek' zorgt ervoor dat functienaam wordt gecompileerd als gastcode 15.3
C5035 het gebruik van functie 'functie' zorgt ervoor dat functienaam wordt gecompileerd als gastcode 15.3
C5036 (niveau 1) varargs functieaanwijzerconversie bij het compileren met /hybrid:x86arm64 'type1' naar 'type2' 15.3
C5038 (niveau 4) data member 'member1' wordt geïnitialiseerd na gegevenslid 'member2' 15.3
C5039 (niveau 4) 'functie': aanwijzer of verwijzing naar een functie die mogelijk wordt doorgegeven aan externe C-functie onder -EHc. Niet-gedefinieerd gedrag kan optreden als deze functie een uitzondering genereert. 15.5
C5041 (niveau 4) 'lidnaam': out-of-line definition for constexpr static data member is not needed and is afgeschaft in C++17. 15.2
C5042 (niveau 3) 'functie': functiedeclaraties bij blokbereik kunnen niet 'inline' worden opgegeven in standaard C++; inlineaanduiding verwijderen 15.5
C5045 Compiler voegt Spectre-beperking toe voor geheugenbelasting als /Qspectre-switch opgegeven 15.7

Visual Studio 2019 en latere versies

De volgende waarschuwingen zijn standaard uitgeschakeld in Visual Studio 2019 en nieuwere versies:

Waarschuwing Bericht
C5052 (niveau 3) Trefwoord 'keyword-name' is geïntroduceerd in de C++-versie en vereist het gebruik van de opdrachtregeloptie 'option' 16.1
C5204 (niveau 3) Een klasse met virtuele functies heeft een niet-virtuele triviale destructor. 16.5
C5214 (niveau 4) het toepassen van 'trefwoord' op een operand met een vluchtig gekwalificeerd type is afgeschaft in C++20 16.7
C5215 (niveau 4) 'function-parameter' een functieparameter met een vluchtig gekwalificeerd type is afgeschaft in C++20 16.7
C5216 (niveau 4) 'return-type' een vluchtig gekwalificeerd retourtype is afgeschaft in C++20 16.7
C5217 (niveau 4) een gestructureerde bindingsdeclaratie met vluchtig is afgeschaft in C++20 16.7
C5219 (niveau 2) impliciete conversie van 'type-1' naar 'type-2', mogelijk verlies van gegevens 16,7
C5220 (niveau 4) Lid: een niet-statisch gegevenslid met een vluchtig gekwalificeerd type impliceert dat niet meer
Compiler gegenereerde copy/move constructors en copy/move toewijzingsoperators zijn niet triviaal 16.7
C5233 (niveau 4) expliciete lambda capture 'id' wordt niet gebruikt 16.10
C5240 (niveau 4) 'kenmerknaam': kenmerk wordt genegeerd in deze syntactische positie 16.10
C5243 (niveau 1) 'type-naam': het gebruik van onvolledige klasse 'klassenaam' kan leiden tot mogelijke schending van één definitieregel vanwege ABI-beperking 16.10
C5245 (niveau 4) 'functie': niet-deductiefunctie met interne koppeling is verwijderd
C5246 (niveau 1) lid: de initialisatie van een subobject moet tussen accolades 16.10 worden verpakt
C5247 (niveau 1) Sectie 'sectienaam' is gereserveerd voor dynamische initialisatie van C++ . Het handmatig maken van de sectie interfereert met dynamische initialisatie van C++ en kan leiden tot niet-gedefinieerd gedrag 16.11
C5248 (niveau 1) Sectie 'sectienaam' is gereserveerd voor dynamische initialisatie van C++ . Variabele die handmatig in de sectie wordt geplaatst, kan worden geoptimaliseerd en de volgorde ten opzichte van door compiler gegenereerde dynamische initializers is niet opgegeven 16.11

Visual Studio 2022 en latere versies

De volgende waarschuwingen zijn standaard uitgeschakeld in Visual Studio 2022 en nieuwere versies:

Waarschuwing Bericht
C5249 (niveau 1) Bitfield van het type 'enumeration_name' heeft opsommingen benoemd met waarden die niet kunnen worden weergegeven in de opgegeven bitveldbreedte van 'bitfield_width'. 17.0
C5250 (niveau 3) 'function_name': intrinsieke functie niet gedeclareerd. 17.0
C5251 (niveau 4) segmentnaam gewijzigd nadat kop 17.1 is opgenomen
C5254 (niveau 4) taalfunctie 'terse static assert' vereist compilervlag '/std:c++17' 17.1
C5256 (niveau 1) opsomming: een niet-definiërende declaratie van een opsomming met een vast onderliggend type is alleen toegestaan als zelfstandige declaratie 17.2
C5258 (niveau 4) expliciete opname van 'symbool' is niet vereist voor dit gebruik 17.2
C5259 (niveau 4) 'special-type': expliciete specialisatie vereist 'template <>' 17.3
C5262 (niveau 1, fout) impliciete fall-through vindt hier plaats; Mist u een break verklaring? Gebruiken [[fallthrough]] wanneer een break instructie opzettelijk wordt weggelaten tussen gevallen 17.4
C5263 (niveau 4) het aanroepen van 'std::move' op een tijdelijk object voorkomt kopie elision 17.4
C5264 (niveau 4) 'variable-name': 'const'-variabele wordt niet gebruikt 17.4
C5266 (niveau 4) "const" kwalificatie voor retourtype heeft geen effect 17,6
C5267 (niveau 4) definitie van impliciete kopieerconstructor/toewijzingsoperator voor 'type' is afgeschaft omdat deze een door de gebruiker opgegeven toewijzingsoperator/kopieerconstructor 17.7 heeft

14.1 Deze waarschuwing is beschikbaar vanaf Visual Studio 2015 Update 1.
14.3 Deze waarschuwing is beschikbaar vanaf Visual Studio 2015 Update 3.
15.2 Deze waarschuwing is beschikbaar vanaf Visual Studio 2017 versie 15.2.
15.3 Deze waarschuwing is beschikbaar vanaf Visual Studio 2017 versie 15.3.
15.5 Deze waarschuwing is beschikbaar vanaf Visual Studio 2017 versie 15.5.
15.7 Deze waarschuwing is beschikbaar vanaf Visual Studio 2017 versie 15.7.
15.8 Deze waarschuwing is beschikbaar vanaf Visual Studio 2017 versie 15.8.
16.0 Deze waarschuwing is beschikbaar vanaf Visual Studio 2019 RTM.
16.5 Deze waarschuwing is beschikbaar vanaf Visual Studio 2019 versie 16.5.
16.7 Deze waarschuwing is beschikbaar vanaf Visual Studio 2019 versie 16.7.
16.10 Deze waarschuwing is beschikbaar vanaf Visual Studio 2019 versie 16.10.
16.11 Deze waarschuwing is beschikbaar vanaf Visual Studio 2019 versie 16.11.
17.0 Deze waarschuwing is beschikbaar vanaf Visual Studio 2022 versie 17.0.
17.1 Deze waarschuwing is beschikbaar vanaf Visual Studio 2022 versie 17.1.
17.2 Deze waarschuwing is beschikbaar vanaf Visual Studio 2022 versie 17.2.
17.3 Deze waarschuwing is beschikbaar vanaf Visual Studio 2022 versie 17.3.
17.4 Deze waarschuwing is beschikbaar vanaf Visual Studio 2022 versie 17.4.
17.5 Deze waarschuwing is beschikbaar vanaf Visual Studio 2022 versie 17.5.
17.6 Deze waarschuwing is beschikbaar vanaf Visual Studio 2022 versie 17.6.
17.7 Deze waarschuwing is beschikbaar vanaf Visual Studio 2022 versie 17.7.
Perm Deze waarschuwing is uitgeschakeld, tenzij de /permissive- compileroptie is ingesteld.

Waarschuwingen standaard uitgeschakeld in eerdere versies

Deze waarschuwing is standaard uitgeschakeld in Visual Studio 2015 versie 15.3 en ingeschakeld in Visual Studio 2015 versie 15.5:

Waarschuwing Bericht
C4768 __declspec kenmerken voordat de koppelingsspecificatie wordt genegeerd

Deze waarschuwingen zijn standaard uitgeschakeld in versies van de compiler vóór Visual Studio 2015:

Waarschuwing Bericht
C4302 (niveau 2) 'conversie': afkappen van 'type1' naar 'type2'
C4311 (niveau 1) 'variabele': afkapping van aanwijzer van 'type' naar 'type'
C4312 (niveau 1) 'bewerking': conversie van 'type1' naar 'type2' met een grotere omvang
C4319 (niveau 1) 'operator': nul uitbreiden 'type1' naar 'type2' van grotere grootte

Deze waarschuwing is standaard uitgeschakeld in versies van de compiler vóór Visual Studio 2012:

Waarschuwing Bericht
C4431 (niveau 4) ontbrekende typeaanduiding - int verondersteld. Opmerking: C biedt geen ondersteuning meer voor standaard-int

Zie ook

warning pragma