Compartilhar via


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

Confira também

__declspec
Palavras-chave