Czy jest dobrze zdefiniowane zachowanie, aby wyjść z programu przed głównym?

Zdecydowanie możliwe jest wykonanie kodu wcześniejmain jest nazywany, jak widać w wielu przykładach wto pytanie.

Co jednak zrobić, jeśli w tym kodzie głównym program ma wyjść za pośrednictwemstd::exit lubstd::abort? Odmain jest zdefiniowany jako początek programu, jakie są konsekwencje wyjścia przed rozpoczęciem?

Po wydrukowaniu czegoś w każdej sekcji otrzymuję następujące wyniki:

Format:
Sekcja: output

Główny: main
Init (zwany przed głównym): init
Wyjdź (skonfiguruj za pomocąstd::atexit wewnątrz Init): exiting



Próbki:

Init wywołał bez wychodzenia:

w tym
Główny
zwraca 0

Init wywołuje std :: exit (0):

w tym
zwraca 0

Init calls std :: abort:

w tym
zawiesza się i zwraca 3 w systemie Windows z GCC 4.7.2
zawiesza się i wyświetla zwykłe pole z VS11
zwraca 0 na LiveWorkSpace

Program obsługi zestawów init i wywołania std :: exit (0):

w tym
wychodzę
zwraca 0

Program obsługi zestawów init i wywołania std :: abort:

w tym
taka sama umowa jak bez obsługi

Podczas wyszukiwania widziałem to pytanie:Czy jest jakiś sposób, w jaki program C / C ++ może ulec awarii przed main ()?. Nie odpowiada jednak na to, co chcę wiedzieć: czy to jest takie zachowanie, dzwonieniestd::exit lubstd::abort przedmain, dobrze zdefiniowane? Czy któreś z tych niezdefiniowanych zachowań?

questionAnswers(1)

yourAnswerToTheQuestion