Share via


kata kunci _Noreturn dan makro noreturn (C11)

Kata kunci _Noreturn diperkenalkan di C11. Kata kunci ini memberi tahu kompilator bahwa fungsi yang diterapkannya tidak kembali ke pemanggil. Kompilator mengetahui bahwa kode yang mengikuti panggilan ke fungsi _Noreturn tidak dapat dijangkau. Salah satu fungsi yang tidak kembali adalah abort. Jika ada kemungkinan aliran kontrol kembali ke pemanggil, fungsi tersebut tidak boleh memiliki atribut _Noreturn.

Kata kunci tersebut biasanya digunakan melalui makro kenyamanan, noreturn, yang disediakan di <stdnoreturn.h>, yang memetakan ke kata kunci _Noreturn.

Manfaat utama menggunakan _Noreturn (atau noreturn yang setara) adalah memperjelas maksud fungsi dalam kode untuk pembaca di masa mendatang, dan mendeteksi kode yang tidak dapat dijangkau secara tidak disengaja.

Fungsi yang ditandai noreturn tidak boleh menyertakan tipe pengembalian karena tidak mengembalikan nilai ke pemanggil. Properti tersebut seharusnya void.

Contoh penggunaan makro noreturn dan kata kunci _Noreturn

Contoh berikut menunjukkan kata kunci _Noreturn dan makro noreturn yang setara.

IntelliSense dapat menghasilkan kesalahan palsu, E0065, jika Anda menggunakan makro noreturn yang dapat Anda abaikan. Hal itu tidak mencegah Anda menjalankan sampel.

// 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;
}

Persyaratan

Makro Header yang dibutuhkan
noreturn <stdnoreturn.h>

Lihat juga

/std (Menentukan versi standar bahasa)
/W4 (Menentukan tingkat peringatan)
Peringatan C4702
__declspec(noreturn)