Это хорошо определенное поведение, чтобы выйти из программы перед основной?

Это'Определенно возможно выполнить код раньше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, четко определены? Есть ли что-нибудь из этого неопределенного поведения?

Ответы на вопрос(1)

Ваш ответ на вопрос