Рекурсивный вызов основной функции в C.
В приведенном фрагменте кода предпринимаются попытки рекурсивного вызова функции main() внутри самой себя в C . Однако важно отметить, что такое поведение не допускается при строгом соответствии требованиям C.
Разрешен ли рекурсивный вызов main() в C?
Согласно стандарту C , функция не может вызывать сама себя напрямую, включая функцию main(). Это ограничение предназначено для предотвращения бесконечной рекурсии и гарантированного завершения программы.
Практическая реализация с помощью g
Несмотря на языковой стандарт, на практике можно вызывать main() рекурсивно с помощью компилятора GNU C (g). g не обеспечивает строгого соблюдения стандарта в этом отношении, позволяя компилировать и выполнять код с рекурсивными вызовами main().
Пример кода
Следующий измененный фрагмент кода демонстрирует рекурсивные вызовы main() с использованием g :
#include
#include
using namespace std;
int main() {
int y = rand() % 10; // returns 3, then 6, then 7
cout При компиляции и выполнении этот код сгенерирует следующий вывод:
y = 3
y = 6
y = 7
Анализ сборки
Исследование сборки, сгенерированной для этого кода, показывает, что g обрабатывает рекурсивные вызовы main() так же, как и любой другой вызов функции:
main:
...
cmpl $7, -12(%rbp)
je .L7
call main
...
.L7:
...
leave
ret
Примечание:
Хотя такое поведение возможно с g , важно отметить, что оно не гарантировано. Другие компиляторы могут строго придерживаться стандарта C, что приводит к ошибкам компиляции или неожиданному поведению. Поэтому использование рекурсивных вызовов main() не рекомендуется.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3