Condividi tramite


Avviso del compilatore (livello 1) C4297

'function': la funzione genera un'eccezione benché ciò non fosse previsto

Una dichiarazione di funzione contiene un identificatore (possibilmente implicito), noexcept un identificatore di eccezione vuoto throw o un attributo __declspec(nothrow) e la definizione contiene una o più istruzioni throw . Per risolvere l'errore C4297, non tentare di generare eccezioni in funzioni dichiarate __declspec(nothrow), noexcept(true) o throw(). In alternativa, rimuovere la specifica noexcept, throw() o __declspec(nothrow).

Per impostazione predefinita, il compilatore genera identificatori noexcept(true) impliciti per le funzioni di deallocatori e distruttori definiti dall'utente e le speciali funzioni membro generate dal compilatore. Ciò è conforme allo standard ISO C++11. Per impedire la generazione di identificatori noexcept impliciti e ripristinare il comportamento non standard di Visual Studio 2013, usare l'opzione del compilatore /Zc:implicitNoexcept- . Per altre informazioni, vedere /Zc:implicitNoexcept (identificatori di eccezione impliciti).

Per altre informazioni sulle specifiche delle eccezioni, vedere Specifiche eccezioni (throw). Vedere anche /EH (Modello di gestione delle eccezioni) per informazioni su come modificare il comportamento di gestione delle eccezioni in fase di compilazione.

Questo avviso viene generato anche per le funzioni __declspec(dllexport) contrassegnate come extern "C", anche se sono funzioni C++.

L'esempio seguente genera l'errore C4297:

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