Delen via


Compilerwaarschuwing (niveau 1) C4297

'functie': functie verondersteld geen uitzondering te genereren, maar wel

Opmerkingen

Een functiedeclaratie bevat een (mogelijk impliciete) noexcept aanduiding, een lege throw uitzonderingsaanduiding of een kenmerk __declspec(nothrow) en de definitie bevat een of meer throw-instructies . Als u C4297 wilt oplossen, probeert u geen uitzonderingen te genereren in functies die zijn gedeclareerd __declspec(nothrow), noexcept(true) of throw(). U kunt ook de noexcept, throw()of __declspec(nothrow) specificatie verwijderen.

Standaard genereert de compiler impliciete noexcept(true) aanduidingen voor door de gebruiker gedefinieerde destructors en deallocatorfuncties en door compiler gegenereerde speciale lidfuncties. Dit voldoet aan de ISO C++11-standaard. Als u het genereren van impliciete noexcept-aanduidingen wilt voorkomen en de compiler wilt herstellen naar het niet-standaardgedrag van Visual Studio 2013, gebruikt u de optie /Zc:implicitNoexcept- compiler. Zie /Zc:implicitNoexcept (Impliciete uitzonderingsaanduidingen) voor meer informatie.

Zie Uitzonderingsspecificaties (throw) voor meer informatie over uitzonderingsspecificaties. Zie ook /EH (Exception Handling Model) voor informatie over het wijzigen van gedrag van de verwerking van uitzonderingen tijdens het compileren.

Deze waarschuwing wordt ook gegenereerd voor __declspec(dllexport)-functies die als extern C zijn gemarkeerd, zelfs als het C++-functies zijn.

Example

In het volgende voorbeeld wordt C4297 gegenereerd:

// C4297.cpp
// compile with: /W1 /LD
void __declspec(nothrow) f1()   // declared nothrow
// try the following line instead
// void f1()
{
   throw 1;   // C4297
}