Partilhar via


_Noreturn palavra-chave e noreturn macro (C11)

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)