Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Adakah Memanggil `main()` Secara Rekursif Dibenarkan dalam C ?

Adakah Memanggil `main()` Secara Rekursif Dibenarkan dalam C ?

Barbara Streisand
Barbara Streisandasal
2024-11-02 19:23:02270semak imbas

Is Recursively Calling `main()` Allowed in C  ?

Memanggil Fungsi Utama Secara Rekursif dalam C

Coretan kod memberikan percubaan untuk memanggil fungsi main() secara rekursif dalam dirinya sendiri dalam C . Walau bagaimanapun, adalah penting untuk ambil perhatian bahawa tingkah laku ini tidak dibenarkan dalam pematuhan C yang ketat.

Adakah Panggilan Rekursif main() Dibenarkan dalam C ?

Mengikut Standard C , fungsi tidak boleh memanggil dirinya secara langsung, termasuk fungsi main(). Sekatan ini bertujuan untuk mengelakkan pengulangan tak terhingga dan menjamin penamatan program.

Pelaksanaan Praktikal dengan g

Walaupun standard bahasa, adalah mungkin untuk memanggil main() secara rekursif dalam amalan menggunakan pengkompil GNU C (g ). g tidak menguatkuasakan standard dengan ketat dalam hal ini, membenarkan kod dengan panggilan main() rekursif untuk menyusun dan melaksanakan.

Kod Contoh

Coretan kod yang diubah suai berikut menunjukkan panggilan main() rekursif menggunakan g :

<code class="cpp">#include <cstdlib>
#include <iostream>
using namespace std;

int main() {
    int y = rand() % 10; // returns 3, then 6, then 7
    cout << "y = " << y << endl;
    return (y == 7) ? 0 : main();
}</code>

Apabila disusun dan dilaksanakan, kod ini akan menjana output berikut:

y = 3
y = 6
y = 7

Analisis Perhimpunan

Memeriksa pemasangan yang dijana untuk kod ini mendedahkan bahawa g memperlakukan panggilan rekursif main() seperti mana-mana panggilan fungsi lain:

main:
        ...
        cmpl    , -12(%rbp)
        je      .L7
        call    main
        ...
.L7:
        ...
        leave
        ret

Nota:

Sementara tingkah laku ini boleh dilakukan dengan g , adalah penting untuk ambil perhatian bahawa ia tidak dijamin. Penyusun lain mungkin mematuhi Piawaian C dengan ketat, mengakibatkan ralat penyusunan atau tingkah laku yang tidak dijangka. Oleh itu, menggunakan panggilan main() rekursif bukanlah amalan yang disyorkan.

Atas ialah kandungan terperinci Adakah Memanggil `main()` Secara Rekursif Dibenarkan 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