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
}