Anmerkung
Der Zugriff auf diese Seite erfordert eine Genehmigung. Du kannst versuchen, dich anzumelden oder die Verzeichnisse zu wechseln.
Der Zugriff auf diese Seite erfordert eine Genehmigung. Du kannst versuchen , die Verzeichnisse zu wechseln.
„Funktion“: Die Funktion löst eine unerwartete Ausnahme aus
Bemerkungen
Eine Funktionsdeklaration enthält einen (möglicherweise impliziten) noexcept Bezeichner, einen leeren throw Ausnahmebezeichner oder ein __declspec(nothrow) -Attribut, und die Definition enthält mindestens eine Throw-Anweisung . Um C4297 zu beheben, versuchen Sie nicht, Ausnahmen in Funktionen auszulösen, die als __declspec(nothrow), noexcept(true) oder throw() deklariert sind. Alternativ können Sie die noexcept-, throw()- oder __declspec(nothrow)-Spezifikation entfernen.
Standardmäßig generiert der Compiler implizite noexcept(true)-Bezeichner für benutzerdefinierte Destruktoren und Deallocator-Funktionen und vom Compiler generierte spezielle Memberfunktionen. Dies entspricht dem ISO-Standard C++11. Um die Generierung impliziter Noexcept-Bezeichner zu verhindern und den Compiler auf das nicht standardmäßige Verhalten von Visual Studio 2013 zurückzuverwenden, verwenden Sie die Compileroption "/Zc:implicitNoexcept-compiler ". Weitere Informationen finden Sie unter /Zc:implicitNoexcept (Implizite Ausnahmebezeichner).
Weitere Informationen zu Ausnahmespezifikationen finden Sie unter "Exception Specifications (throw)". Weitere Informationen zum Ändern des Ausnahmebehandlungsverhaltens zur Kompilierungszeit finden Sie unter /EH (Ausnahmebehandlungsmodell ).
Diese Warnung wird auch für __declspec(dllexport)-Funktionen generiert, die extern als "C" gekennzeichnet sind, auch wenn sie C++-Funktionen sind.
Example
Im folgenden Beispiel wird C4297 generiert:
// C4297.cpp
// compile with: /W1 /LD
void __declspec(nothrow) f1() // declared nothrow
// try the following line instead
// void f1()
{
throw 1; // C4297
}