noreturn
Seção específica da Microsoft
O __declspec
atributo informa ao compilador que uma função não retorna. O compilador, em seguida, sabe que o código após uma chamada para uma __declspec(noreturn)
função é 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 para isZeroOrPositive
é 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 faz sentido já fatal()
que 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
Confira também
Comentários
https://aka.ms/ContentUserFeedback.
Brevemente: Ao longo de 2024, vamos descontinuar progressivamente o GitHub Issues como mecanismo de feedback para conteúdos e substituí-lo por um novo sistema de feedback. Para obter mais informações, veja:Submeter e ver comentários