2013-06-27 14 views
10

Słyszałem, że w C, main() jest reentrant, podczas gdy w C++ nie jest.Czy funkcja main() została ponownie zgłoszona?

Czy to prawda? Jaki jest scenariusz ponownego wejścia w funkcję main()?

+7

Nie sądzę, to znaczy [reentrant] (http://en.wikipedia.org/wiki/Reentrancy_ (computing)). Prawdą jest jednak, że możesz wywoływać 'main' w C i nie możesz wywoływać go w C++. –

Odpowiedz

16

Wczesne implementacje C++, które były oparte na tłumaczeniu na język C, zaimplementowano globalnych konstruktorów poprzez dodanie wywołania funkcji na początku main. W ramach takiej implementacji ponownie wywołałby globalny cors, wywołując spustoszenie, więc było to po prostu zabronione.

C z drugiej strony nie miał powodu, aby zabronić dzwonienia pod numer main i zawsze było to tradycyjnie możliwe.

chodzi gdy jest to przydatne, powiedziałbym, „rzadko”. Większość programów, które widziałem, które nazywały się main, to wpisy IOCCC.