Это хорошо определенное поведение, чтобы выйти из программы перед основной?
Это'Определенно возможно выполнить код раньшеmain
называется, как видно из многих примеров вэтот вопрос.
Тем не менее, что если в этом основном коде программе сообщается о выходе черезstd::exit
или жеstd::abort
? посколькуmain
определяется как запуск программы, каковы последствия выхода из нее до ее запуска?
После печати чего-то в каждом разделе я получаю следующие результаты:
Формат:
Раздел:output
Главный:main
Init (вызывается перед main):init
Выход (настраивается с помощьюstd::atexit
внутри Init):exiting
Образцы прогонов:
Вызван init без выхода:
в этом
главный
возвращает 0
Init вызывает std :: exit (0):
в этом
возвращает 0
Init вызывает std :: abort:
в этом
вылетает и возвращает 3 на Windows с GCC 4.7.2
вылетает и поднимает обычную коробку с VS11
возвращает 0 в LiveWorkSpace
Init устанавливает обработчик и вызывает std :: exit (0):
в этом
выход
возвращает 0
Init устанавливает обработчик и вызывает std :: abort:
в этом
та же сделка, что и без обработчика
Во время поиска я увидел этот вопрос:Есть ли какой-нибудь способ, которым программа C / C ++ может аварийно завершить работу перед main ()?, Тем не менее, это нене могу ответить на то, что я хочу знать:std::exit
или жеstd::abort
доmain
, четко определены? Есть ли что-нибудь из этого неопределенного поведения?