Rumah > pembangunan bahagian belakang > C++ > Bolehkah fungsi main() memanggil dirinya dalam C ?

Bolehkah fungsi main() memanggil dirinya dalam C ?

Susan Sarandon
Lepaskan: 2024-11-03 00:09:02
asal
954 orang telah melayarinya

Can the main() function call itself in C  ?

Rekursi dalam fungsi main(): Gelagat Pengkompil yang Tidak Dijangka

Panggilan ke fungsi main() biasanya tidak dibenarkan dalam C . Walau bagaimanapun, dalam amalan, ia mungkin boleh dilakukan pada beberapa platform, terutamanya pada sistem Linux dengan pengkompil g. Mari kita mendalami cara tingkah laku ini dicapai.

Dalam contoh kod yang disediakan:

<code class="cpp">#include <iostream>
#include <cstdlib>

int main() {
    cout << "!!!Hello World!!!" << endl;
    system("pause");
    return main();
}</code>
Salin selepas log masuk

Panggilan ke main() dalam fungsi main() membenarkan gelung tanpa henti. Walau bagaimanapun, ini bukan kelakuan C standard.

Sihir Pengkompil atau Tingkah Laku Tidak Ditakrifkan?

Adakah mungkin untuk mendapatkan fungsi berjalan semasa menggunakan pembolehubah ajaib atau makro? Tidak, tiada peruntukan sedemikian dalam Piawaian C.

Pengecualian Pengkompil Linux

Walaupun terdapat larangan Standard, pengkompil Linux g menyusun kod dengan panggilan main() dalam main() tanpa menimbulkan ralat. Ini disebabkan oleh tafsiran lembut pengkompil bagi Piawaian C.

Demonstrasi Praktikal

Pertimbangkan kod berikut:

<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>
Salin selepas log masuk

Apabila disusun dengan g , kod ini menjana kod pemasangan yang kelihatan seperti:

<code class="assembly">main:
        ...
        cmpl    , -12(%rbp)
        je      .L7
        call    main
        ...
.L7:
        ...
        leave
        ret</code>
Salin selepas log masuk

Dalam kod pemasangan ini, utama dipanggil sama seperti fungsi lain. Panggilan ke main() dalam fungsi main() diterjemahkan ke dalam panggilan fungsi biasa.

Kesimpulan

Semasa memanggil main() dari dalam main() ialah tidak dibenarkan oleh Piawaian C, ia mungkin boleh dilakukan pada platform tertentu dengan penyusun khusus yang bertolak ansur dengan tingkah laku sedemikian. Walau bagaimanapun, adalah penting untuk menekankan bahawa ini bukan standard C dan boleh membawa kepada hasil yang tidak dijangka dalam persekitaran atau versi penyusun yang berbeza.

Atas ialah kandungan terperinci Bolehkah fungsi main() memanggil dirinya dalam C ?. 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