Compilerwarnung (Ebene 1) C4297
„Funktion“: Die Funktion löst eine unerwartete Ausnahme aus
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. Verwenden Sie die Compileroption "/Zc:implicitNoexcept-Compiler", um die Generierung impliziter Noexcept-Bezeichner zu verhindern rückgängig machen und den Compiler auf das nicht standardmäßige Verhalten von Visual Studio 2013 anzuwenden. 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.
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
}