Fungsi dengan Jenis Pemulangan Bukan Lompang Mengembalikan Sampah
Dalam C , jika fungsi mengisytiharkan jenis pulangan bukan batal tetapi gagal dikembalikan nilai, pengkompil biasanya mengembalikan nilai sampah. Ini menimbulkan persoalan: mengapa ini tidak dianggap sebagai ralat pada masa penyusunan?
Perbandingan dengan Pembolehubah Tidak Dimulakan
Analogi kepada pembolehubah tidak dimulakan tidak boleh digunakan. Dalam kes pembolehubah yang tidak dimulakan, pengkompil boleh mengesan ralat secara statik kerana peruntukan adalah setempat kepada bingkai tindanan fungsi semasa. Sebaliknya, nilai pulangan fungsi diperuntukkan pada bingkai tindanan pemanggil, menjadikannya lebih mencabar untuk pengkompil untuk menjejaki.
Kelakuan Tidak Ditakrifkan
Menurut C standard, mengalir keluar dari penghujung fungsi pengembalian nilai menghasilkan tingkah laku yang tidak ditentukan. Ini bermakna bahawa pengkompil tidak bertanggungjawab untuk mengesan atau mengendalikan situasi ini.
Amaran Pengkompil
Kebanyakan penyusun mengeluarkan amaran untuk kod seperti contoh yang diberikan:
int func2() { // does not return anything }
Amaran ini menunjukkan bahawa kod tersebut berkemungkinan tidak selamat dan boleh membawa kepada perkara yang tidak dijangka keputusan.
Kesukaran dalam Menentukan Keluar Fungsi
Piawaian C tidak memerlukan pemeriksaan ralat masa kompilasi untuk tingkah laku ini kerana ia boleh mencabar untuk menentukan sama ada fungsi itu memang keluar pada penghujung atau jika ia keluar melalui pengecualian atau beberapa mekanisme aliran kawalan lain.
Atas ialah kandungan terperinci Mengapa C Tidak Menjamin Ralat Masa Kompilasi untuk Fungsi Hilang Nilai Pulangan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!