Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
A _Noreturn palavra-chave foi introduzida no C11. Ele informa ao compilador que a função à qual ele é aplicado não retorna ao chamador. O compilador sabe que o código após uma chamada para uma _Noreturn função é inacessível. Um exemplo de uma função que não retorna é abortar. Se houver a possibilidade de o fluxo de controle retornar ao chamador, a função não deve ter o _Noreturn atributo.
A palavra-chave é normalmente usada através da macro de conveniência, noreturn, fornecida em <stdnoreturn.h>, que mapeia para a _Noreturn palavra-chave.
Os principais benefícios do uso _Noreturn (ou equivalente noreturn) são tornar a intenção da função clara no código para futuros leitores e detetar código involuntariamente inacessível.
Uma função marcada noreturn não deve incluir um tipo de retorno porque não retorna um valor para o chamador. Deve ser void.
Exemplo de utilização de noreturn macro e _Noreturn palavra-chave
O exemplo a seguir demonstra a _Noreturn palavra-chave e a macro equivalente noreturn .
IntelliSense pode gerar um erro espúrio, E0065, se você usar a macro noreturn que você pode ignorar. Isso não impede que você execute o exemplo.
// Compile with Warning Level4 (/W4) and /std:c11
#include <stdio.h>
#include <stdlib.h>
#include <stdnoreturn.h>
noreturn void fatal_error(void)
{
exit(3);
}
_Noreturn void not_coming_back(void)
{
puts("There's no coming back");
fatal_error();
return; // warning C4645 - function declared with noreturn has a return statement
}
void done(void)
{
puts("We'll never get here");
}
int main(void)
{
not_coming_back();
done(); // warning c4702 - unreachable code
return 0;
}
Requerimentos
| Macro | Cabeçalho obrigatório |
|---|---|
noreturn |
<stdnoreturn.h> |
Ver também
/std (Especificar versão padrão do idioma)
/W4 (Especificar nível de aviso)
Advertência C4702
__declspec(noreturn)