Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
„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. 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.
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
}