là nó cho phép trong "C++"? Số
Trong thực tế, bạn có thể gọi main()
không? Vâng.
Bất kể chuẩn C++ nói gì, điều đó không ngăn trình biên dịch Linux g ++ biên dịch mã với main()
trong main()
.
#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();
}
nào cho phép chúng ta làm:
> g++ g.cpp; ./a.out
y = 3
y = 6
y = 7
Nhìn ở với đại chúng, chúng ta thấy rằng chính được gọi là giống như bất kỳ chức năng khác sẽ là:
main:
...
cmpl $7, -12(%rbp)
je .L7
call main
...
.L7:
...
leave
ret
Không phải là hành vi này được đảm bảo, nhưng có vẻ như g ++ dường như không thực sự quan tâm đến tiêu chuẩn, ngoài cảnh báo châm biếm này với -pedantic
g.cpp:8: error: ISO C++ forbids taking address of function '::main'
Nguồn
2012-04-25 08:14:13
Nếu bạn muốn có được một con trỏ hàm hoặc một cái gì đó để các chức năng hiện tại, tôi không nghĩ rằng đó là có thể. –
Đó là đệ quy vô hạn ... nó có thể biên dịch, nhưng "công trình" không hoàn toàn đúng. –
Là một sang một bên, XIN không bình luận những điều rõ ràng. Nó sẽ được rõ ràng rằng dòng in! Xin chào thế giới !!! – Joe