Rumah >pembangunan bahagian belakang >C++ >Sekiranya Penyusun Melemparkan Ralat untuk Fungsi yang Kurang Nilai Pulangan dalam C?
Adakah Boleh Diterima Penyusun Memulangkan Sampah Apabila Fungsi Mengisytiharkan Jenis Pemulangan Tidak Kosong tetapi Gagal Mengembalikan Nilai?
The ketiadaan pernyataan pulangan dalam fungsi dengan jenis pulangan bukan batal menimbulkan persoalan tentang tingkah laku pengkompil. Walaupun pengkompil mungkin kelihatan memulangkan sampah dalam kes sedemikian, ini bukanlah penyelesaian yang ideal.
Mengapa Ia Bukan Ralat?
Dalam C , berfungsi tanpa nilai pulangan menunjukkan tingkah laku yang tidak ditentukan. Walau bagaimanapun, kebanyakan penyusun mengeluarkan amaran dan bukannya ralat. Ini kerana ia tidak selalunya mudah untuk pengkompil untuk menentukan sama ada fungsi benar-benar berjalan di hujung atau keluar melalui pengecualian.
Pertimbangkan contoh berikut:
int func1() { return; // error } int func2() { // does not return anything }
Dalam kes ini, func2 sepatutnya secara teorinya mencetuskan ralat, tetapi ia tidak. Ini kerana pengkompil tidak dapat menjamin bahawa func2 tidak akan keluar melalui pengecualian, menjadikannya sukar untuk membuktikan bahawa ia benar-benar lari dari penghujung fungsi.
Mengapa Ia Tidak Melemparkan Ralat ?
Tidak seperti pembolehubah tidak dimulakan, yang jelas bermasalah, kekurangan nilai pulangan fungsi mungkin tidak selalu menjadi isu. Contohnya:
int func3() { func4(); }
Jika func4 membuang pengecualian, maka nilai pulangan yang hilang func3 adalah tidak penting. Walau bagaimanapun, pengkompil tidak boleh sentiasa menentukan sama ada func4 akan membuang atau tidak, terutamanya apabila mempertimbangkan kod yang disusun secara berasingan.
Kesimpulannya, sementara kelakuan tidak ditentukan C untuk fungsi tanpa nilai pulangan adalah tidak ideal, pengkompil biasanya mengeluarkan amaran dan bukannya ralat untuk mengelakkan potensi positif palsu disebabkan oleh kerumitan menentukan laluan pelaksanaan sebenar fungsi.
Atas ialah kandungan terperinci Sekiranya Penyusun Melemparkan Ralat untuk Fungsi yang Kurang Nilai Pulangan dalam C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!