noreturn
Seção específica da Microsoft
O __declspec
atributo informa ao compilador que uma função não retorna. O compilador então sabe que o código após uma chamada para uma __declspec(noreturn)
função está inacessível.
Se o compilador encontra uma função com um caminho de controle que não retorna um valor, ele gera um aviso (C4715) ou uma mensagem de erro (C2202). Se o caminho de controle não puder ser alcançado devido a uma função que nunca retorna, use __declspec(noreturn)
para evitar esse aviso ou erro.
Observação
Adicionar __declspec(noreturn)
a uma função cujo retorno é esperado pode resultar em um comportamento indefinido.
Exemplo
No exemplo a seguir, quando o argumento for isZeroOrPositive
for negativo, fatal
é chamado. Não há uma instrução return nesse caminho de controle, o que resulta no aviso C4715 de que nem todos os caminhos de controle retornam um valor. Declarar fatal
como __declspec(noreturn)
atenua esse aviso, o que é desejável porque não há sentido nisso, pois fatal()
encerra o programa.
// 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);
}
Fim da seção específica da Microsoft