Gelagat Pengkompil Apabila Fungsi Mengembalikan Sampah untuk Jenis Pemulangan Tidak Kosong
Dalam C , fungsi yang tidak mengembalikan nilai secara eksplisit untuknya jenis pulangan yang ditentukan dianggap mempunyai tingkah laku yang tidak ditentukan. Walau bagaimanapun, sesetengah penyusun tidak mengeluarkan sebarang ralat dalam kes sedemikian, meninggalkan nilai yang dikembalikan sebagai sampah.
Sebab Toleransi Pengkompil
Tingkah laku ini berpunca daripada fakta bahawa ia boleh mencabar bagi penyusun untuk menentukan secara pasti sama ada fungsi akan mencapai penghujungnya dan mengembalikan sampah atau jika ia akan keluar melalui pengecualian atau yang lain mekanisme pemulangan bukan standard.
Contoh
Pertimbangkan kod berikut:
int func1() { return; // Error } int func2() { // Does not return anything }
Fungsi pertama, func1(), menimbulkan ralat semasa penyusunan kerana ia tidak mengembalikan nilai secara eksplisit untuk jenis pulangan yang ditentukan (int). Sebaliknya, func2() tidak menghasilkan ralat walaupun tidak mengembalikan nilai secara eksplisit.
Implikasi untuk Permulaan Pembolehubah
Tingkah laku yang tidak ditentukan dalam func2() ialah tidak serupa dengan pembolehubah tidak diinisialisasi dalam C . Piawaian C membezakan antara pembolehubah yang dibiarkan tanpa dimulakan secara eksplisit dan pembolehubah yang ditetapkan sebagai "tingkah laku tidak ditentukan" disebabkan oleh pelaksanaan yang tidak lengkap atau keadaan luar biasa lain.
Amaran Pengkompil dan Definisi Standard
Walaupun kebanyakan penyusun tidak akan menimbulkan ralat untuk func2(), mereka mungkin mengeluarkan amaran untuk menunjukkan potensi tingkah laku yang tidak ditentukan. Piawaian C menyatakan bahawa keluar dari fungsi tanpa nilai pulangan untuk jenis pulangan bukan batal membawa kepada gelagat tidak ditentukan:
Mengalir keluar dari hujung fungsi adalah bersamaan dengan pulangan tanpa nilai; ini mengakibatkan tingkah laku yang tidak ditentukan dalam fungsi pengembalian nilai.
Kesimpulan
Walaupun sesetengah penyusun tidak menimbulkan ralat untuk fungsi yang tidak mengembalikan nilai, tingkah laku ini dianggap tidak ditentukan oleh piawaian C. Penyusun mungkin memberikan amaran untuk membenderakan kes sedemikian, tetapi akhirnya menjadi tanggungjawab pembangun untuk memastikan semua fungsi mempunyai penyata pemulangan yang jelas atau mengendalikan syarat pemulangan yang luar biasa dengan sewajarnya.
Atas ialah kandungan terperinci Apa yang Berlaku Apabila Fungsi C Tidak Mengembalikan Nilai?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!