palavra-chave _Noreturn
e macro noreturn
(C11)
A palavra-chave _Noreturn
foi introduzida em C11. Ela informa ao compilador que a função à qual ela é aplicada não retornará ao chamador. Como consequência, o compilador sabe que o código seguinte a uma chamada para uma função _Noreturn
estará inacessível. Um exemplo de uma função que não retorna é anular. Se houver uma possibilidade de o fluxo de controle retornar ao chamador, a função não deve ter o atributo _Noreturn
.
A palavra-chave normalmente é usada por meio da macro de conveniência, noreturn
, fornecida em <stdnoreturn.h>, que mapeia para a palavra-chave _Noreturn
.
Os principais benefícios de usar _Noreturn
(ou o equivalente noreturn
) são deixar clara a intenção da função no código para leitores futuros e detectar código inacessível de forma involuntária.
Uma função marcada noreturn
não deve incluir um tipo de retorno, porque ela não retorna nenhum valor para o chamador. Ela deverá ser void
.
Exemplo usando macro noreturn
e palavra-chave _Noreturn
O exemplo a seguir demonstra a palavra-chave _Noreturn
e a macro equivalente noreturn
.
O IntelliSense pode gerar um erro falso, E0065
, se você usar a macro noreturn
, que pode ser ignorada. 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;
}
Requisitos
Macro | Cabeçalho necessário |
---|---|
noreturn |
<stdnoreturn.h> |
Confira também
/std (Especificar versão padrão da linguagem)
/W4 (Especificar nível de aviso)
aviso C4702
__declspec(noreturn)