Bolehkah g Memanggil `main()` secara Rekursif dalam C Walaupun Standard Melarangnya?

Susan Sarandon
Lepaskan: 2024-10-31 20:26:29
asal
660 orang telah melayarinya

Can g   Recursively Call `main()` in C   Despite the Standard Forbidding It?

Memanggil main() secara rekursif dalam C

Piawaian C menetapkan bahawa memanggil main() secara rekursif tidak dibenarkan. Walau bagaimanapun, pengkompil g membenarkan amalan ini, membenarkan kod luar biasa seperti:

<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();
}
Salin selepas log masuk

Setelah dilaksanakan:

> g++ g.cpp; ./a.out
y = 3
y = 6
y = 7</code>
Salin selepas log masuk

Memeriksa kod pemasangan mendedahkan bahawa utama digunakan sama dengan mana-mana fungsi lain :

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

Walaupun tingkah laku ini tidak diseragamkan, g nampaknya mempunyai pendekatan yang santai untuk menguatkuasakan standard, seperti yang dibuktikan oleh kekurangan bantahannya. Walau bagaimanapun, ia mengeluarkan amaran sarkastik apabila menggunakan bendera -pedantic:

g.cpp:8: error: ISO C++ forbids taking address of function '::main'
Salin selepas log masuk

Atas ialah kandungan terperinci Bolehkah g Memanggil `main()` secara Rekursif dalam C Walaupun Standard Melarangnya?. 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
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!