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)
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk