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ń?