Rumah > pembangunan bahagian belakang > C++ > Mengapa Fungsi C Menyusun Tanpa Penyata Pulangan Eksplisit Walaupun Mengisytiharkan Jenis Pulangan?

Mengapa Fungsi C Menyusun Tanpa Penyata Pulangan Eksplisit Walaupun Mengisytiharkan Jenis Pulangan?

Susan Sarandon
Lepaskan: 2024-12-13 04:41:15
asal
858 orang telah melayarinya

Why Does a C   Function Compile Without an Explicit Return Statement Despite Declaring a Return Type?

Mengapa Coretan C Ini Disusun Walaupun Tiada Nilai Pulangan?

Dalam coretan kod yang disediakan:

static tvec4 Min(const tvec4& a, const tvec4& b, tvec4& out)
{
    tvec3::Min(a, b, out);
    out.w = min(a.w, b.w);
}
Salin selepas log masuk

Fungsi Min diisytiharkan sebagai mengembalikan tvec4, tetapi kod itu tidak memberikan pernyataan pulangan yang jelas. Ini menimbulkan persoalan mengapa pengkompil menyusun kod tanpa ralat.

Gelagat Tidak Ditakrifkan

Menurut piawaian draf C 11, mengalir keluar dari hujung nilai -fungsi pengembalian tanpa memberikan nilai pulangan menghasilkan tingkah laku yang tidak ditentukan. Ini bermakna bahawa pengkompil tidak diwajibkan untuk mengeluarkan ralat atau amaran dalam kes sedemikian.

Pilihan Pengkompil

Walau bagaimanapun, pengkompil boleh dikonfigurasikan untuk memberi amaran atau bahkan menjana ralat untuk tingkah laku yang tidak ditentukan. Sebagai contoh, menggunakan bendera -Wall selalunya boleh mencetuskan amaran seperti:

warning: control reaches end of non-void function [-Wreturn-type]
Salin selepas log masuk

Dengan menambahkan bendera -Werror=return-type, pengkompil akan menganggap amaran ini sebagai ralat, memaksa kod menjadi diperbetulkan.

Visual Studio

Dalam Visual Studio, kod akan menghasilkan ralat C4716 secara lalai:

error C4716: 'Min' : must return a value
Salin selepas log masuk

Dalam kes di mana tidak semua laluan kod mengembalikan nilai, Visual Studio akan mengeluarkan amaran (C4715).

Atas ialah kandungan terperinci Mengapa Fungsi C Menyusun Tanpa Penyata Pulangan Eksplisit Walaupun Mengisytiharkan Jenis Pulangan?. 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