Я полагаю, что это сохраняет свободу реализации для префикса main
с кодом для конструирования глобальных и статических переменных, принятия любых параметров, идентифицирующих аргументы среды и командной строки, и сопоставления их с соглашениями argc / argv / env C ++, конструкцией соответствующая структура стека и исключений для запуска приложения и т. д. Учтите, что не во всех средах разрешается запускать исполняемый образ любого другого символа, обозначенного как код инициализации, до main()
.
Аналогично, код очистки может быть добавлен к main()
вместе с вызовом ОС с некоторым отображением из соглашения 0 и ненулевого значения C и C ++ к фактическим значениям успеха / неудачи, используемым этой конкретной ОС.
Следовательно, вызов main
из другого места может привести к второй повторной инициализации инфраструктуры приложения или к непреднамеренному выходу из ОС - мне это кажется катастрофическим.