Rumah >pembangunan bahagian belakang >C++ >Mengapa Memanggil `main()` Secara Rekursif Membawa kepada Gelagat Tidak Ditakrifkan dalam C ?
Coretan kod di bawah telah menimbulkan persoalan dalam kalangan pengaturcara:
int main () { return main(); }
Ia menyusun tanpa ralat tetapi gagal untuk menamatkan pelaksanaan, membawa kepada spekulasi mengenainya tingkah laku.
Tingkah Laku Tidak Tertakrif: Enigma utama
Mengikut piawaian C, [basic.start.main](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0689r2.html#3.6.1) menyatakan bahawa "Fungsi utama tidak boleh dinamakan dengan ungkapan." Ini menunjukkan bahawa panggilan utama dalam program adalah dilarang.
Gelagat Pengkompil: Amaran atau Senyap?
Penyusun boleh mengendalikan kes khusus ini secara berbeza. GCC, dengan pilihan -pedantic didayakan, mengeluarkan amaran tentang penggunaan haram utama. Visual Studio, walau bagaimanapun, kekal senyap, memilih untuk tidak memberi amaran tentang sifat rekursif kod.
Apa Yang Berlaku Apabila Anda Panggil utama?
Jawapan kepada soalan ini terletak dalam lingkungan tingkah laku yang tidak ditentukan. Piawaian tidak mentakrifkan apa yang harus berlaku apabila utama dipanggil dalam program. Akibatnya, sebarang tingkah laku yang diperhatikan tidak dapat diramalkan dan bergantung kepada pelaksanaan.
Kesimpulan
Panggilan utama dalam program ialah tindakan yang tidak ditentukan dan tingkah lakunya tidak boleh diramalkan dengan pasti . Penyusun mungkin mengendalikan kes ini secara berbeza, mengeluarkan amaran atau gagal untuk menyusun sama sekali. Percubaan untuk menentukan hasil tingkah laku yang tidak ditentukan adalah sia-sia dan boleh membawa kepada keputusan yang tidak dijangka dan berpotensi berbahaya.
Atas ialah kandungan terperinci Mengapa Memanggil `main()` Secara Rekursif Membawa kepada Gelagat Tidak Ditakrifkan dalam C ?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!