Rumah >pembangunan bahagian belakang >C++ >Mengapa Pengkompil C g Saya Menyusun Fungsi Tanpa Penyata Pemulangan, Walaupun Ia Mengembalikan Struktur?
Masalah:
Pemaju menghadapi tingkah laku yang tidak dijangka apabila menggunakan versi g untuk Windows diperoleh melalui Strawberry Perl. Pengkompil g membenarkan mereka meninggalkan pernyataan pulangan dalam fungsi bukan batal, walaupun fungsi itu mengembalikan struktur.
Analisis Mendalam:
Coretan kod disediakan:
struct boundTag Box::getBound(int side) { struct boundTag retBoundTag; retBoundTag.box = this; switch (side) { // set retBoundTag.bound based on value of "side" } }
Dalam fungsi bukan batal seperti ini, meninggalkan pernyataan pulangan membawa kepada tidak ditentukan tingkah laku. Piawaian ISO C -98 menyatakan bahawa:
Mengalir dari hujung fungsi adalah bersamaan dengan pulangan tanpa nilai; ini mengakibatkan gelagat tidak ditentukan dalam fungsi pengembalian nilai.
Mengapa Ia Disusun Tanpa Amaran?
Sementara meninggalkan pernyataan pulangan tidak ditentukan tingkah laku, sesetengah penyusun mungkin tidak mengeluarkan amaran secara lalai. Untuk membolehkan amaran yang lebih teliti, adalah disyorkan untuk menggunakan pilihan -Wall semasa menyusun.
Akibat Meninggalkan Penyata Pemulangan
Mengabaikan penyata pemulangan dalam bentuk bukan- fungsi lompang boleh mempunyai akibat yang tidak dapat diramalkan. Fungsi ini mungkin mengembalikan nilai yang tidak dimulakan atau menyebabkan program ranap. Selain itu, menggunakan nilai yang dikembalikan dalam kod berikutnya boleh membawa kepada hasil yang tidak dijangka.
Kesimpulan
Walaupun pengkompil g membenarkan peninggalan penyata pulangan dalam kes ini, ia adalah penting untuk mematuhi piawaian ISO C dan sentiasa memasukkan pernyataan pulangan dalam fungsi bukan lompang. Meninggalkan pernyataan pulangan boleh membawa kepada tingkah laku yang tidak ditentukan dan akibat yang tidak dapat diramalkan.
Atas ialah kandungan terperinci Mengapa Pengkompil C g Saya Menyusun Fungsi Tanpa Penyata Pemulangan, Walaupun Ia Mengembalikan Struktur?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!