MinGW использует этот код в качестве запуска для каждой программы
static void __attribute__((noreturn)) __mingw_CRTStartup (void)
{
int nRet;
SetUnhandledExceptionFilter (_gnu_exception_handler);
_fpreset ();
_mingw32_init_mainargs ();
_mingw32_init_fmode ();
_pei386_runtime_relocator ();
asm __volatile__ ("andl $-16, %%esp" : : : "%esp");
nRet = main (_argc, _argv, environ);
_cexit ();
ExitProcess (nRet);
}
Какая альтернатива для Linux для линейки ExitProcess(nRet);
который завершает все потоки и обрабатывает возвращаемое значение? Где я могу найти исходный код для Linux / OS X GCC Runtime? Завершает ли среда выполнения Linux-GCC / XCode все потоки? Если нет, то как он обрабатывает возвращаемые значения main?
Соответствующий код, который немного сложнее в «glibc», чем приведенный выше код MingW (потому что у него много опций, с которыми связаны как компиляция, так и выбор времени выполнения):
Тем не менее, простое представление таково:
result = main (argc, argv, __environ MAIN_AUXVEC_PARAM);
exit (result);
И да, exit
будет убивать все потоки (если ничего другого, ОС будет, когда системный вызов для выхода вызывается в _exit()
,
Других решений пока нет …