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
aktiviert alle Warnungen, die standardmäßig deaktiviert sind. Wenn Sie diese Option verwenden, können Sie einzelne Warnungen mithilfe der Option/wd
deaktivieren. -
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 |