noreturn
Sezione specifica Microsoft
L'attributo __declspec
indica al compilatore che una funzione non restituisce. Il compilatore sa quindi che il codice che segue una chiamata a una __declspec(noreturn)
funzione non è raggiungibile.
Se il compilatore rileva una funzione con un percorso di controllo che non restituisce un valore, viene generato un avviso (C4715) o un messaggio di errore (C2202). Se non è possibile raggiungere il percorso del controllo a causa di una funzione che non viene mai restituita, utilizzare __declspec(noreturn)
per evitare questo avviso o errore.
Nota
L'aggiunta __declspec(noreturn)
a una funzione che dovrebbe restituire può comportare un comportamento non definito.
Esempio
Nell'esempio seguente, quando l'argomento per isZeroOrPositive
è negativo, fatal
viene chiamato . Non esiste un'istruzione return in tale percorso di controllo, che genera un avviso C4715 che non tutti i percorsi di controllo restituiscono un valore. fatal
La dichiarazione come __declspec(noreturn)
attenua l'avviso, che è auspicabile perché non vi è alcun punto in esso perché fatal()
termina il programma.
// noreturn2.cpp
#include <exception>
__declspec(noreturn) void fatal()
{
std::terminate();
}
int isZeroOrPositive(int val)
{
if (val == 0)
{
return 0;
}
else if (val > 0)
{
return 1;
}
// this function terminates if val is negative
fatal();
}
int main()
{
isZeroOrPositive(123);
}
Fine sezione specifica Microsoft