Not
Åtkomst till denna sida kräver auktorisation. Du kan prova att logga in eller byta katalog.
Åtkomst till denna sida kräver auktorisation. Du kan prova att byta katalog.
Nyckelordet _Noreturn introducerades i C11. Den meddelar kompilatorn att den funktion som den tillämpas på inte återgår till anroparen. Kompilatorn vet att koden efter ett anrop till en _Noreturn funktion inte kan nås. Ett exempel på en funktion som inte returneras är att avbryta. Om det finns en möjlighet att kontrollflödet återgår till anroparen får funktionen inte ha attributet _Noreturn .
Nyckelordet används vanligtvis via bekvämlighetsmakronet, noreturn, som anges i <stdnoreturn.h>, som mappar till nyckelordet _Noreturn .
De främsta fördelarna med att använda _Noreturn (eller motsvarande noreturn) är att göra funktionens avsikt tydlig i koden för framtida läsare och identifiera oavsiktligt oåtkomlig kod.
En funktion som är markerad noreturn bör inte innehålla någon returtyp eftersom den inte returnerar ett värde till anroparen. Det bör vara void.
Exempel med noreturn makro och _Noreturn nyckelord
I följande exempel visas nyckelordet _Noreturn och motsvarande noreturn makro.
IntelliSense kan generera ett falskt fel, E0065, om du använder makrot noreturn som du kan ignorera. Det hindrar dig inte från att köra exemplet.
// 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;
}
Kravspecifikation
| Makro | Obligatoriskt huvud |
|---|---|
noreturn |
<stdnoreturn.h> |
Se även
/std (Ange språkstandardversion)
/W4 (Ange varningsnivå)
C4702-varning
__declspec(noreturn)