2013-06-27 27 views
10

Tôi nghe nói rằng trong C, main() là reentrant, trong khi trong C + + thì không.Hàm main() có tham gia lại không?

Điều này có đúng không? Kịch bản của việc nhập lại hàm main() là gì?

+7

Tôi không nghĩ rằng bạn có nghĩa là [reentrant] (http://en.wikipedia.org/wiki/Reentrancy_ (máy tính)). Tuy nhiên, đúng là bạn được phép gọi 'main' trong C và bạn không được phép gọi nó trong C++. –

Trả lời

16

Triển khai sớm C++, dựa trên bản dịch cho C, đã triển khai các nhà thầu toàn cầu thông qua thêm một cuộc gọi hàm vào đầu main. Trong quá trình thực hiện như vậy, gọi lại main một lần nữa sẽ chạy lại các ctors toàn cầu, dẫn đến tàn phá, do đó, nó chỉ đơn giản là bị cấm làm như vậy. Mặt khác,

C không có lý do gì để cấm gọi main và luôn có thể theo truyền thống.

Vì khi nào hữu ích, tôi sẽ nói "hiếm khi". Hầu hết các chương trình tôi đã nhìn thấy được gọi là main là các mục IOCCC.

Các vấn đề liên quan