Rumah > pembangunan bahagian belakang > C++ > Mengapakah Meninggalkan Penyata Pemulangan dalam Fungsi Tidak Batal C Kadang-kadang Berfungsi (dan Mengapa Ia Tidak Sepatutnya)?

Mengapakah Meninggalkan Penyata Pemulangan dalam Fungsi Tidak Batal C Kadang-kadang Berfungsi (dan Mengapa Ia Tidak Sepatutnya)?

Mary-Kate Olsen
Lepaskan: 2024-11-20 02:42:01
asal
779 orang telah melayarinya

Why Does Omitting a Return Statement in a Non-Void C   Function Sometimes Work (and Why It Shouldn't)?

Mengabaikan Penyata Pemulangan dalam C

Dalam C , adalah lazim untuk menamatkan fungsi tidak batal dengan penyata pulangan. Walau bagaimanapun, kejadian aneh telah diperhatikan dalam versi Windows tertentu g yang diedarkan dengan Strawberry Perl. Versi ini membenarkan peninggalan pernyataan pemulangan dalam fungsi yang mengembalikan nilai bukan batal, yang membawa kepada tingkah laku yang tidak dijangka.

Pertimbangkan fungsi ahli berikut:

struct boundTag Box::getBound(int side) {
    struct boundTag retBoundTag;
    retBoundTag.box = this;
    switch (side)
    {
        // set retBoundTag.bound based on value of "side"
    }
}
Salin selepas log masuk

Fungsi ini direka bentuk untuk kembalikan struktur yang mewakili tag terikat. Walau bagaimanapun, pembangun secara tidak sengaja telah meninggalkan penyata pemulangan:

// ... code from above
}
Salin selepas log masuk

Apabila menguji fungsi ini, pembangun menerima output yang sah walaupun penyataan pemulangan hilang. Walaupun selepas mengalih keluar penyataan pemulangan, kod itu menyusun tanpa sebarang amaran.

Isu yang mendasarinya ialah meninggalkan penyataan pemulangan dalam fungsi bukan batal menimbulkan gelagat yang tidak ditentukan. Piawaian ISO C -98 secara eksplisit menyatakan bahawa mengalir keluar dari hujung fungsi bukan lompang adalah bersamaan dengan pulangan tanpa nilai, mengakibatkan gelagat tidak ditentukan.

// ... code from above
// Undefined behavior
}
Salin selepas log masuk

Dalam senario ini, g berkemungkinan mengembalikan a nilai sampah kerana pengkompil tidak dapat menentukan nilai pulangan yang dimaksudkan. Menggunakan nilai yang dikembalikan ini dalam kod anda adalah berbahaya dan boleh membawa kepada hasil yang tidak dapat diramalkan.

Walaupun g mungkin tidak mengeluarkan amaran secara lalai, menggunakan pilihan -Wall semasa penyusunan memaksa pengkompil untuk memberi amaran tentang kes ini. Pilihan ini akan menyerlahkan penyataan pulangan yang hilang dan membantu menghalang tingkah laku yang tidak ditentukan sedemikian.

Oleh itu, adalah penting untuk sentiasa memasukkan pernyataan pulangan dalam fungsi bukan batal, walaupun jika nilai pulangan tidak digunakan serta-merta. Amalan ini memastikan bahawa kod mematuhi piawaian C dan mengelakkan sebarang kemungkinan tingkah laku yang tidak ditentukan.

Atas ialah kandungan terperinci Mengapakah Meninggalkan Penyata Pemulangan dalam Fungsi Tidak Batal C Kadang-kadang Berfungsi (dan Mengapa Ia Tidak Sepatutnya)?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan