group-telegram.com/cxx95/41
Create:
Last Update:
Last Update:
#creepy
Можно ли рекурсивно вызывать метод main()? 🔄
(минутка бесполезной информации)
Когда-то давно я читал набор вопросов к собеседованию по C++, и там встретился такой: "можно ли вызывать метод main() из программы"?
int main() {Казалось бы,
int n;
std::cin >> n;
if (n != 0) {
return main();
}
return 0;
}
Во всех известных мне окружениях функция
main()
в действительности не является точкой входа - сначала вызывается функция, сгенерированная компилятором, которая проинициализирует глобальные переменные. А сам main()
ничем не отличается от других функций.Linkage функции
main()
является implementation-defined (ссылка на стандарт): обычно имя функции не манглится. Также написано, что main()
не должен вызываться в программе.Стандарт говорит, что рекурсивный вызов
main()
запрещен (ссылка на стандарт).Однако все современные компиляторы успешно компилируют такой код! Они могут выводить warning, если компилировать с опцией
-Wmain
: ссылка на godbolt.Поэтому ответ на вопрос такой - рекурсивно вызывать
main()
нельзя, но компилятор будет компилировать это, если не указывать специальные флаги как -Wmain
или -pedantic
.BY C++95
Warning: Undefined variable $i in /var/www/group-telegram/post.php on line 260
Share with your friend now:
group-telegram.com/cxx95/41