Rumah >pembangunan bahagian belakang >C++ >Mengapa Memanggil `main()` Secara Rekursif Membawa kepada Gelagat Tidak Ditakrifkan dalam C ?

Mengapa Memanggil `main()` Secara Rekursif Membawa kepada Gelagat Tidak Ditakrifkan dalam C ?

Patricia Arquette
Patricia Arquetteasal
2024-12-13 02:25:101011semak imbas

Why Does Recursively Calling `main()` Lead to Undefined Behavior in C  ?

Memanggil utama untuk memanggil utama: Pencarian Tidak Ditakrifkan

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!

Kenyataan:
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