Standardmäßig deaktivierte Compilerwarnungen

Der Compiler unterstützt Warnungen, die standardmäßig deaktiviert sind, da sie für die meisten Entwickler nicht nützlich sind. In einigen Fällen warnen sie vor einer stilistischen Auswahl oder vor häufigen Idiome in älterem Code. Andere Warnungen gelten für die Verwendung einer Microsoft-Erweiterung für die Sprache. Einige Warnungen weisen auf einen Bereich hin, in dem Programmierer häufig falsche Annahmen treffen, was zu unerwartetem oder nicht definiertem Verhalten führen kann. Wenn alle diese Warnungen aktiviert sind, werden einige davon möglicherweise mehrmals in Bibliotheksheadern angezeigt. Die C-Laufzeitbibliotheken und die C++-Standardbibliotheken sollen nur auf Der Warnstufe keine Warnungen aus geben /W4.

Standardmäßig deaktivierte Warnungen aktivieren

Sie können Warnungen aktivieren, die normalerweise standardmäßig deaktiviert sind, indem Sie eine der folgenden Optionen verwenden:

  • #pragma warning(default :warning_number)

    Die angegebene Warnung (warning_number) ist auf der Standardebene aktiviert. Dokumentation für die Warnung enthält die Standardebene der Warnung.

  • #pragma warning(: warning_level warning_number)

    Die angegebene Warnung (warning_number) ist auf der angegebenen Ebene (warning_level).

  • /Wall

    /Wall aktiviert alle Warnungen, die standardmäßig deaktiviert sind. Wenn Sie diese Option verwenden, können Sie einzelne Warnungen mithilfe der Option /wd deaktivieren.

  • /wLNnnn

    Diese Option aktiviert die Warnung nnnn auf Ebene L.

Standardmäßig deaktivierte Warnungen

Die folgenden Warnungen sind ab Version 2015 Visual Studio standardmäßig deaktiviert:

Warnung `Message`
C4061 (Ebene 4) Der Enumerator "Bezeichner" in einem Schalter der Enumeration "Enumeration" wird nicht explizit von einer Case-Bezeichnung behandelt.
C4062 (Ebene 4) Der Enumerator "Bezeichner" in einem Schalter der Enumeration "Enumeration" wird nicht behandelt.
C4165 (Ebene 1) "HRESULT" wird in "bool" konvertiert. Sind Sie sicher, dass Sie dies möchten?
C4191 (Ebene 3) "Operator": unsichere Konvertierung von "type_of_expression" in "type_required"
C4242 (Ebene 4) "Bezeichner": Konvertierung von "Typ1" in "Typ2", möglicher Datenverlust
C4254 (Ebene 4) "Operator": Konvertierung von "Typ1" in "Typ2", möglicher Datenverlust
C4255 (Ebene 4) "function": Kein Funktionsprototyp angegeben: Konvertieren von "()" in "(void)"
C4263 (Ebene 4) "Funktion": Memberfunktion überschreibt keine virtuelle Memberfunktion der Basisklasse
C4264 (Ebene 1) 'virtual_function': Für die virtuelle Memberfunktion aus der Basisklasse ist keine Überschreibung verfügbar. Funktion ist ausgeblendet
C4265 (Ebene 3) "Klasse": Die Klasse verfügt über virtuelle Funktionen, aber der Destruktor ist nicht virtuell.
C4266 (Ebene 4) "Funktion": Für die virtuelle Memberfunktion vom Basistyp ist keine Überschreibung verfügbar. Funktion ist ausgeblendet
C4287 (Ebene 3) 'operator': unsigned/negative constant mismatch
C4289 (Ebene 4) Nicht standardmäßig verwendete Erweiterung: 'var': Schleifensteuerungsvariable, die in der for-Schleife deklariert ist, wird außerhalb des For-Schleifenbereichs verwendet.
C4296 (Ebene 4) 'Operator': Ausdruck ist immer FALSE
C4339 (Ebene 4) 'Typ': Verwendung eines nicht definierten Typs, der in CLR-Metadaten erkannt wurde– die Verwendung dieses Typs kann zu einer Laufzeitausnahme führen.
C4342 (Ebene 1) Verhaltensänderung: 'Funktion' aufgerufen, aber ein Memberoperator wurde in früheren Versionen aufgerufen.
C4350 (Ebene 1) Verhaltensänderung: "Member1" wird anstelle von "Member2" aufgerufen
C4355 "this": Wird in der Basisliste für den Memberinitialisierer verwendet
C4365 (Ebene 4) "action": Konvertierung von "type_1" in "type_2", Konflikt zwischen signierten und nicht signierten
C4370 (Ebene 3) Durch bessere Verpackung wurde das Klassenlayout geändert, das vorher eine andere Compilerversion hatte
C4371 (Ebene 3) 'Klassenname': Das Layout der Klasse hat sich möglicherweise gegenüber einer früheren Version des Compilers aufgrund einer besseren Packung des Member "Member" geändert.
C4388 (Ebene 4) Konflikt zwischen 'signed' und 'unsigned'
C4412 (Ebene 2) "function": Funktionssignatur enthält typ 'type'; C++-Objekte können nicht sicher zwischen reinem Code und gemischtem oder nativem Code übergeben werden.
C4426 (Ebene 1) optimierungsflags changed after including header, may be due to #pragma optimize() 14.1
C4435 (Ebene 4) 'klasse1': Das Objektlayout unter /vd2 ändert sich aufgrund der virtuellen Basis "klasse2".
C4437 (Ebene 4) dynamic_cast von der virtuellen Basis "Klasse1" zu "Klasse2" kann in einigen Kontexten fehlschlagen.
C4444 (Ebene 3) Höchste Ebene '__unaligned' ist in diesem Kontext nicht implementiert
C4464 (Ebene 4) Relativer Includepfad enthält ".".
C4471 (Ebene 4) Eine Vorwärtsdeklaration einer nicht durchkopierten Enumeration muss einen zugrunde liegenden Typ (nicht angenommen) Perm haben.
C4472 (Ebene 1) "Bezeichner" ist eine native Enum: Fügen Sie einen Zugriffsspezifizierer (privat/öffentlich) hinzu, um eine verwaltete Enum zu deklarieren.
C4514 (Ebene 4) "Funktion": Inlinefunktion ohne Rückschluss wurde entfernt
C4536 (Ebene 4) "Typname": Typname überschreitet Metadatenlimit für "Limit"-Zeichen
C4545 (Ebene 1) Ausdruck vor dem Komma wird als Funktion ausgewertet, der eine Argumentliste fehlt
C4546 (Ebene 1) Funktionsaufruf vor dem Komma ohne Argumentliste
C4547 (Ebene 1) 'Operator': Operator vor Komma hat keine Auswirkungen; Erwarteter Operator mit Nebeneffekt
C4548 (Ebene 1) Ausdruck vor dem Komma hat keine Auswirkung; es wurde ein Ausdruck mit Nebeneffekt erwartet
C4549 (Ebene 1) 'operator1': Operator vor Komma hat keine Auswirkungen; Haben Sie "operator2" beabsichtigt?
C4555 (Ebene 1) Der Ausdruck hat keine Auswirkungen; Ausdruck mit Nebeneffekten erwartet
C4557 (Ebene 3) "__assume" enthält den Effekt "effect".
C4571 (Ebene 4) informational: catch(...) semantics changed since Visual C++ 7.1; Strukturierte Ausnahmen (SEH) werden nicht mehr erfasst.
C4574 (Ebene 4) "Bezeichner" ist als "0" definiert: Haben Sie "bezeichner" #if verwendet?
C4577 (Ebene 1) "noexcept" wird ohne Angabe des Ausnahmebehandlungsmodus verwendet. Die Beendigung bei einer Ausnahme ist nicht garantiert. Geben Sie /EHsc an.
C4582 (Ebene 4) 'Typ': Der Konstruktor wird nicht implizit aufgerufen.
C4583 (Ebene 4) "Typ": Destruktor wird nicht implizit aufgerufen
C4587 (Ebene 1) "anonymous_structure": Verhaltensänderung: Konstruktor wird nicht mehr implizit aufgerufen
C4588 (Ebene 1) "anonymous_structure": Verhaltensänderung: Destruktor wird nicht mehr implizit aufgerufen
C4596 (Ebene 4) "Bezeichner": Ungültiger qualifizierter Name in der Memberdeklaration 14.3Perm
C4598 (Ebene 1 und Ebene 3) "#include "header": Headernummer der Headernummer im vorkompilierten Header passt nicht zur aktuellen Kompilierung an dieser Position 14.3.
C4599 (Ebene 3) "Optionspfad": Die Nummer des Befehlszeilenarguments passt nicht zum vor kompilierten Header 14.3.
C4605 (Ebene 1) "/Dmacro" in der aktuellen Befehlszeile angegeben, wurde aber nicht angegeben, als der vorkompilierte Header erstellt wurde.
C4608 (Ebene 3) "union_member" wurde bereits von einem anderen Union-Member in der Initialisiererliste ,union_member' Perm initialisiert.
C4619 (Ebene 3) #pragma: Es gibt keine Warnnummer "Zahl".
C4623 (Ebene 4) 'Abgeleitete Klasse': Der Standardkonstruktor konnte nicht generiert werden, da auf einen Basisklassen-Standardkonstruktor nicht zugegriffen werden kann
C4625 (Ebene 4) 'Abgeleitete Klasse': Der Kopierkonstruktor konnte nicht generiert werden, da auf einen Basisklassen-Kopierkonstruktor nicht zugegriffen werden kann
C4626 (Ebene 4) 'Abgeleitete Klasse': Der Zuweisungsoperator konnte nicht generiert werden, da auf einen Basisklassen-Zuweisungsoperator nicht zugegriffen werden kann
C4628 (Ebene 1) 'digraphs' werden mit '-Ze' nicht unterstützt. Die Zeichenfolge "digraph" wird nicht als alternatives Token für "char" interpretiert.
C4640 (Ebene 3) "Instanz": Die Konstruktion eines lokalen statischen Objekts ist nicht threadsicher
C4643 (Ebene 4) Das Vorwärtsdeklarieren von "Identifier" im Namespace std ist vom C++-Standard nicht zulässig. 15.8
C4647 (Ebene 3) Verhaltensänderung: __is_pod(Typ) hat in früheren Versionen einen anderen Wert
C4654 (Ebene 4) Code, der vor dem Include der vorkompilierten Kopfzeile platziert wird, wird ignoriert. Fügen Sie Code zum vorkompilierten Header hinzu. 14.1
C4668 (Ebene 4) "Symbol" ist nicht als Präprozessormakro definiert und ersetzt durch "0" für "Direktiven".
C4682 (Ebene 4) "symbol": Es wurde kein Attribut für einen richtungsalen Parameter angegeben. Der Standardwert ist [in].
C4686 (Ebene 3) "Benutzerdefinierter Typ": mögliche Verhaltensänderung, Änderung in UDT-Rückgabe-Aufrufkonvention
C4692 (Ebene 1) "Funktion": Die Signatur eines nicht privaten Members enthält den privaten nativen Assemblytyp "native_type"
C4710 (Ebene 4) 'Funktion': Funktion nicht inline
C4738 (Ebene 3) Das 32-Bit-Gleitkommaergebnis wird im Speicher gespeichert. Möglicherweise kommt es zu einem Leistungsverlust
C4746 Der flüchtige Zugriff auf "expression" unterliegt der Einstellung /volatile:<iso|ms> . Erwägen Sie die Verwendung __iso_volatile_load systeminternen Funktionen/Speichern.
C4749 (Ebene 4) bedingt unterstützt: offsetof wird auf den nicht standardmäßigen Layouttyp "Typ" angewendet.
C4767 (Ebene 4) Der Abschnittsname "Symbol" ist länger als 8 Zeichen und wird vom Linker abgeschnitten.
C4774 (Ebene 4) 'string': Die in der Argumentnummer erwartete Formatzeichenfolge ist kein Zeichenfolgenliteral.
C4777 (Ebene 4) "Funktion": Die Formatzeichenfolge "string" erfordert ein Argument vom Typ "Type1", aber die variadic-Argumentnummer hat den Typ "type2".
C4786 (Ebene 3) "Symbol": Der Objektname wurde in den Debuginformationen auf "Number"-Zeichen gekürzt.
C4800 (Ebene 4) Implizite Konvertierung von 'Typ' in bool. Möglicher Informationsverlust 16.0
C4820 (Ebene 4) Byteauf padding nach dem Konstrukt "member_name" hinzugefügt
C4822 (Ebene 1) "Member": Die Memberfunktion der lokalen Klasse verfügt nicht über einen Text
C4826 (Ebene 2) Die Konvertierung von "type1" in "type2" wird erweitert. Dies kann zu unerwartetem Laufzeitverhalten führen.
C4837 (Ebene 4) Trigraph erkannt: "?? character" durch "character" ersetzt
C4841 (Ebene 4) Nicht standardmäßig verwendete Erweiterung: zusammengesetzter Member-Designator, der in offsetof verwendet wird
C4842 (Ebene 4) Das Ergebnis von "offsetof", das auf einen Typ mit mehrfacher Vererbung angewendet wird, ist nicht garantiert konsistent zwischen Compilerversionen.
C4866 (Ebene 4) Der Compiler "file(line-number)" erzwingt möglicherweise keine Auswertungs reihenfolge von links nach rechts für den Aufruf des Operators .
C4868 (Ebene 4) Der Compiler "file(line_number)" erzwingt möglicherweise keine Auswertungs reihenfolge von links nach rechts in der Initialisierungsliste mit geschweiften Klammern.
C4905 (Ebene 1) Breites Zeichenfolgenliteral umgewandelt zu "LPSTR"
C4906 (Ebene 1) Zeichenfolgenliteral umgewandelt zu "LPWSTR"
C4917 (Ebene 1) "Deklarator": Eine GUID kann nur einer Klasse, Schnittstelle oder einem Namespace zugeordnet werden.
C4928 (Ebene 1) Unzulässige Kopierinitialisierung. Mehrere benutzerdefinierte Konvertierungen wurden implizit übernommen
C4931 (Ebene 4) Es wird angenommen, dass die Typbibliothek für Anzahl-Bit-Pointer erstellt wurde
C4946 (Ebene 1) reinterpret_cast verknüpften Klassen verwendet werden: "class1" und "class2".
C4962 "Funktion": Profilgesteuerte Optimierungen deaktiviert, da Optimierungen dazu geführt haben, dass Profildaten inkonsistent wurden
C4986 (Ebene 4) "Symbol": Die Ausnahmespezifikation entspricht nicht der vorherigen Deklaration.
C4987 (Ebene 4) Es wurde eine nicht standardmäßige Erweiterung verwendet: 'throw (...)'
C4988 (Ebene 4) "Symbol": Variable, die außerhalb des Klassen-/Funktionsbereichs deklariert ist
C5022 "Typ": Mehrere Move-Konstruktoren angegeben
C5023 "Typ": Mehrere Operatoren für die Zuweisung von Verschieben angegeben
C5024 (Ebene 4) "Typ": Der Move-Konstruktor wurde implizit als gelöscht definiert.
C5025 (Ebene 4) "Typ": Der Zuweisungsoperator für das Verschieben wurde implizit als gelöscht definiert.
C5026 (Ebene 1 und Ebene 4) "Typ": Der Move-Konstruktor wurde implizit als gelöscht definiert.
C5027 (Ebene 1 und Ebene 4) "Typ": Der Zuweisungsoperator für das Verschieben wurde implizit als gelöscht definiert.
C5029 (Ebene 4) Nicht standardmäßig verwendete Erweiterung: Ausrichtungsattribute in C++ gelten nur für Variablen, Datenmitglieder und Tagtypen.
C5031 (Ebene 4) #pragma(Pop): Wahrscheinlich nicht übereinstimmend, Popping-Warnungszustand wird in andere Datei 14.1 pusht
C5032 (Ebene 4) erkannte #pragma(Push) ohne entsprechende #pragma warning(pop) 14.1
C5034 Die Verwendung der systeminternen Funktion bewirkt, dass der Funktionsname als Gastcode 15.3 kompiliert wird.
C5035 Die Verwendung des Features "Feature" bewirkt , dass der Funktionsname als Gastcode 15.3 kompiliert wird.
C5036 (Ebene 1) Varargs-Funktionszeigerkonvertierung beim Kompilieren mit /hybrid:x86arm64 'type1' in 'type2' 15.3
C5038 (Ebene 4) Der Daten member 'member1' wird nach dem Daten member 'member2' 15.3 initialisiert.
C5039 (Ebene 4) 'Funktion': Zeiger oder Verweis auf potenziell auslösende Funktion, die an externe C-Funktion unter -EHc übergeben wird. Nicht definiertes Verhalten kann auftreten, wenn diese Funktion eine Ausnahme auslöst. 15,5
C5041 (Ebene 4) "Membername": Out-of-Line-Definition für den statischen constexpr-Daten member ist nicht erforderlich und in C++17 veraltet. 15.2
C5042 (Ebene 3) 'Funktion': Funktionsdeklarationen im Blockbereich können nicht inline in Standard C++ angegeben werden. Entfernen des Inlinespezifizierers 15.5
C5045 Der Compiler fügt spectre-Entschärfung für die Speicherauslastung ein, wenn der /Qspectre-Switch 15.7 angegeben hat.
C5052 (Ebene 3) Das Schlüsselwort "keyword-name" wurde in C++- Version eingeführt und erfordert die Verwendung der Befehlszeilenoption "option" 16.1.
C5204 (Ebene 3) Eine Klasse mit virtuellen Funktionen verfügt über einen nicht virtuellen trivialen Destruktor. 16.5
C5214 (Ebene 4) Das Anwenden von "Keyword" auf einen Operanden mit einem flüchtigen qualifizierten Typ ist in C++20 16.7 veraltet.
C5215 (Ebene 4) "function-parameter" ein Funktionsparameter mit einem flüchtigen qualifizierten Typ ist in C++20 16.7 veraltet.
C5216 (Ebene 4) "rückgabetyp" Ein flüchtiger qualifizierter Rückgabetyp ist in C++20 16.7 veraltet.
C5217 (Ebene 4) Eine strukturierte Bindungsdeklaration, die volatile enthält, ist in C++20 16.7 veraltet.
C5219 (Ebene 2) implizite Konvertierung von "Typ-1" in "Typ-2", möglicher Datenverlust 16.7
C5220 (Ebene 4) "Member": Ein nicht statischer Daten member mit einem flüchtigen qualifizierten Typ impliziert nicht mehr, dass
Vom Compiler generierte Kopier-/Verschieben-Konstruktoren und Kopier-/Verschiebenzuweisungsoperatoren sind nicht trivial 16.7
C5233 (Ebene 4) Explizite Lambdaerfassung "Bezeichner" wird nicht verwendet 16.10
C5240 (Ebene 4) "attribut-name": Das Attribut wird an dieser syntaktischen Position 16.10 ignoriert.
C5243 (Ebene 1) "Typname": Die Verwendung der unvollständigen Klasse "Klassenname" kann aufgrund der ABI-Einschränkung16.10 zu einer potenziellen Verletzung einer Definitionsregel führen.
C5245 (Ebene 4) "Funktion": Funktion ohne Rückschluss mit interner Verknüpfung wurde entfernt
C5246 (Ebene 1) "Member": Die Initialisierung eines Unterobjekts sollte in geschweifte Klammern 16.10 umschlossen werden.
C5247 (Ebene 1) Abschnitt "Abschnittsname" ist für die dynamische C++-Initialisierung reserviert. Das manuelle Erstellen des Abschnitts beeinträchtigt die dynamische Initialisierung von C++ und kann zu nicht definiertem Verhalten 16.11 führen.
C5248 (Ebene 1) Abschnitt "Abschnittsname" ist für die dynamische C++-Initialisierung reserviert. Variablen, die manuell in den Abschnitt eingegeben werden, können optimiert werden, und ihre Reihenfolge relativ zu vom Compiler generierten dynamischen Initialisierern ist nicht angegeben 16.11.
C5249 (Ebene 1) "bitfield" vom Typ "enumeration_name" hat benannte Enumeratoren mit Werten, die nicht in der angegebenen Bitfeldbreite von "bitfield_width" dargestellt werden können. 17.0
C5250 (Ebene 3) 'function_name': Systeminterne Funktion nicht deklariert. 17.0
C5251 (Ebene 4) Segmentname nach dem Hinzufügen von Header 17.1 geändert
C5254 (Ebene 4) Sprachfeature "terse static assert" erfordert das Compilerflag "/std:c++17" 17.1

14.1 Diese Warnung ist ab Update 1 Visual Studio 2015 verfügbar.
14.3 Diese Warnung ist ab Update 3 Visual Studio 2015 verfügbar.
15.2 Diese Warnung ist ab version 15.2 Visual Studio 2017 verfügbar.
15.3 Diese Warnung ist ab version 15.3 Visual Studio 2017 verfügbar.
15.5 Diese Warnung ist ab version 15.5 Visual Studio 2017 verfügbar.
15.7 Diese Warnung ist ab version 15.7 Visual Studio 2017 verfügbar.
15.8 Diese Warnung ist ab version 15.8 Visual Studio 2017 verfügbar.
16.0 Diese Warnung ist ab Visual Studio 2019 RTM verfügbar.
16.5 Diese Warnung ist ab version 16.5 Visual Studio 2019 verfügbar.
16.7 Diese Warnung ist ab version 16.7 Visual Studio 2019 verfügbar.
16.10 Diese Warnung ist ab version 16.10 Visual Studio 2019 verfügbar.
16.11 Diese Warnung ist ab version 16.11 Visual Studio 2019 verfügbar.
17.0 Diese Warnung ist ab version 17.0 Visual Studio 2022 verfügbar.
17.1 Diese Warnung ist ab version 17.1 Visual Studio 2022 verfügbar.
Perm Diese Warnung ist deaktiviert, es sei denn /permissive- , die Compileroption ist festgelegt.

Warnungen in früheren Versionen standardmäßig deaktiviert

Diese Warnung war in Version 15.3 Visual Studio 2015 standardmäßig deaktiviert und in Visual Studio 2015 Version 15.5 aktiviert:

Warnung `Message`
C4768 __declspec Attribute vor der Verknüpfungsspezifikation werden ignoriert.

Diese Warnungen waren in Versionen des Compilers vor Visual Studio 2015 standardmäßig deaktiviert:

Warnung `Message`
C4302 (Ebene 2) "Konvertierung": Abschneiden von "Typ1" in "Typ2"
C4311 (Ebene 1) 'variable': Zeigerschneidung von 'Typ' auf 'Typ'
C4312 (Ebene 1) "Operation": Konvertierung von "Typ1" in "Typ2" mit größerer Größe
C4319 (Ebene 1) "Operator": Null, die "Typ1" auf "Typ2" mit größerer Größe erweitert

Diese Warnung war in Versionen des Compilers vor Visual Studio 2012 standardmäßig deaktiviert:

Warnung `Message`
C4431 (Ebene 4) Fehlender Typspezifizierer - int wird angenommen. Hinweis: default-int wird von C++ nicht unterstützt

Weitere Informationen

warning-Pragma