Aracılığıyla paylaş


_Noreturn anahtar sözcük ve noreturn makro (C11)

anahtar _Noreturn sözcüğü C11'de tanıtıldı. Derleyiciye uygulandığı işlevin çağırana dönmediğini söyler. 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ği olmamalıdır.

Anahtar sözcüğü genellikle anahtar sözcükle eşlenen stdnoreturn.h> dosyasında <sağlanan kolaylık makrosunda noreturn_Noreturn kullanılır.

(veya eşdeğerinoreturn) kullanmanın _Noreturn birincil avantajları, işlevin amacını gelecekteki okuyucular için kodda net hale getirmek ve istenmeyen şekilde ulaşılamayan kodu algılamaktır.

çağırana değer döndürmediğinden, işaretlenmiş 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üğü ve eşdeğer noreturn makro gösterilmektedir_Noreturn.

Yoksayabileceğiniz makroyu noreturn kullanırsanız IntelliSense sahte bir hata E0065oluş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ü belirt)
/W4 (Uyarı düzeyini belirtin)
C4702 uyarısı
__declspec(noreturn)