Rumah >pembangunan bahagian belakang >C++ >Mengapa Fungsi C Menyusun Tanpa Penyata Pulangan Eksplisit Walaupun Mengisytiharkan Jenis Pulangan?
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); }
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]
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
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!