_Noreturn
anahtar sözcük ve noreturn
makro (C11)
anahtar _Noreturn
sözcüğü C11'de tanıtıldı. Derleyiciye, uygulandığı işlevin çağırana geri dönmediğini bildirir. Derleyici, bir _Noreturn
işlev çağrısından sonra gelen koda ulaşılamediğini bilir. Döndürmeyen bir işleve örnek olarak abort işlemi verilmiştir. Denetim akışının çağırana geri dönme olasılığı varsa işlevin _Noreturn
özniteliğine sahip olmaması gerekir.
Anahtar sözcük genellikle stdnoreturn.h> dosyasında <sağlanan ve anahtar sözcükle eşlenen kolaylık makrosunda noreturn
_Noreturn
kullanılır.
(veya eşdeğerinoreturn
) kullanmanın _Noreturn
birincil avantajları, işlevin amacını kodda gelecekteki okuyucular için net hale getirmek ve istemeden ulaşılamayan kodu algılamaktır.
çağırana değer döndürmediğinden, işaretli noreturn
bir işlev dönüş türü içermemelidir. void
olmalıdır.
Makro ve _Noreturn
anahtar sözcük kullanma noreturn
örneği
Aşağıdaki örnekte anahtar sözcük ve eşdeğer noreturn
makro gösterilmektedir_Noreturn
.
Yoksayabileceğiniz makroyu noreturn
kullanırsanız IntelliSense sahte bir hata E0065
oluşturabilir. Bu, örneği çalıştırmanızı engellemez.
// 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;
}
Gereksinimler
Makro | Gerekli başlık |
---|---|
noreturn |
<stdnoreturn.h> |
Ayrıca bkz.
/std (Dil standart sürümünü belirtin)
/W4 (Uyarı düzeyini belirtin)
C4702 uyarısı
__declspec(noreturn)