Z pewnością możliwe jest wykonanie kodu przed wywołaniem main
, co widać na wielu przykładach w this question.Czy to dobrze określone zachowanie, aby wyjść z programu przed głównym?
Co jednak jeśli w tym głównym kodzie głównym program zostanie powiadomiony o wyjściu przez std::exit
lub std::abort
? Od main
jest zdefiniowany jako początek programu, jakie są konsekwencje wyjścia z programu przed rozpoczęciem?
Przy drukowaniu coś w każdej sekcji, mam następujące wyniki:
Format:
Sekcja: output
główna: main
Init (zwany przed główny): init
Exit (utworzone z std::atexit
wewnątrz Init): exiting
Przykładowe trasy:
Init wywołana bez wychodzenia:
Init
główne
zwraca 0
Init zwraca std :: exit (0):
startowych
zwraca 0
Init zwraca std: : przerwij:
startowych
awarii i zwraca 3 na Windows GCC 4.7.2
awarii i wywołuje zwykłe pudełko z VS11
zwraca 0 na LiveWorkSpace
Init ustawia obsługi i zwraca std :: exit (0):
init
exiting
zwraca 0
Init ustawia obsługi i zwraca std :: Abort:
startowych
sam interes jak bez obsługi
Podczas poszukiwania, widziałem to pytanie: Is there any way a C/C++ program can crash before main()?. Nie odpowiada jednak na to, co chcę wiedzieć: czy jedno z tych zachowań, wywołujące std::exit
lub std::abort
, jest dobrze zdefiniowane? Czy to nieokreślone zachowanie?
Jeśli interesuje Cię próbka łącząca testy, [tutaj jest jeden] (http://liveworkspace.org/code/ff19b767d545e3c8a76671b1d21add00). – chris