Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.03.2010, 16:30   #1
fs444
Форумчанин
 
Регистрация: 18.08.2009
Сообщений: 289
По умолчанию Рекурсивный вызов функции main

Цитата:
3.46. Можно ли рекурсивно вызывать функцию main? Напишите программу, содержащую
функцию main. Включите в нее локальную переменную count типа static, задав ей на-
чальное значение 1. Давайте ей приращение и печатайте значение count при каждом
вызове main. Запустите вашу программу. Что произойдет?
Не понимаю, где здесь рекурсивный вызов main() будет?

Написал такой код:
Код:
#include<iostream>
using namespace std;

#include<windows>

int main()
{
   static int count = 1;
   ++count;
   cout << count << endl;

   system("pause");
   return 0;
}
fs444 вне форума Ответить с цитированием
Старый 30.03.2010, 17:12   #2
artush1984
Форумчанин
 
Аватар для artush1984
 
Регистрация: 27.04.2009
Сообщений: 184
По умолчанию

насколько я знаю main() вызваться операционной системой !! так что по моему ты не сможешь вызвать рекурсивно
Hа C я могy пpосто делать ошибки, на C++ я могy их наследовать!
artush1984 вне форума Ответить с цитированием
Старый 30.03.2010, 17:35   #3
f.hump
C/C++, Asm
Участник клуба
 
Аватар для f.hump
 
Регистрация: 02.03.2010
Сообщений: 1,323
По умолчанию

Понятно, что проблемы вызывать main рекурсирвно нет, будет работать пока не убъет стек.

int main() {
static int count = 1;
cout<<count<<endl;
count++;

main();

return 0;
}

Интересно, что курят те кто придумывает такие задачи?
f.hump вне форума Ответить с цитированием
Старый 04.04.2010, 13:32   #4
fs444
Форумчанин
 
Регистрация: 18.08.2009
Сообщений: 289
По умолчанию

Цитата:
main() вызваться операционной системой !! так что по моему ты не сможешь вызвать рекурсивно
Я тоже удивился тому, что написано в условии задачи =)))) Потому сюда и написал.

Цитата:
Интересно, что курят те кто придумывает такие задачи?
мне это тоже очень интересно =)))

Код:
int main() {
static int count = 1;
cout<<count<<endl;
count++;

main();

return 0;
}
выдает ошибку
Цитата:
[C++ Error] N3_46_P273_rekursivnij_vizov_main.c pp(12): E2120 Cannot call 'main' from within the program
fs444 вне форума Ответить с цитированием
Старый 04.04.2010, 14:33   #5
f.hump
C/C++, Asm
Участник клуба
 
Аватар для f.hump
 
Регистрация: 02.03.2010
Сообщений: 1,323
По умолчанию

Цитата:
выдает ошибку E2120
Borland C++ надо понимать. Да, он не даст такое сделать.
Microsoft VS выдает только предупреждение о том, что нет выхода из рекурсии.

результат работает до тех пор, пока Винда его не останавливает со словами: "Процесс остановлен из-за StackOveflowException"

Последний раз редактировалось f.hump; 04.04.2010 в 14:38.
f.hump вне форума Ответить с цитированием
Старый 04.04.2010, 17:56   #6
pproger
C++ hater
СтарожилДжуниор
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,333
По умолчанию

у любой рекурсии есть вероятность забития стека, за этим кагбэ следить надо, и конкретно main тут не виноват

Код:
#include <stdio.h>

int main()
{
	static int a = 10;

	printf("%d\n", a);

	if (--a < 0) {
		return 0;
	}

	return main();
}
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay

My other car is cdr.

Q: Whats the object-oriented way to become wealthy?
A: Inheritance
pproger вне форума Ответить с цитированием
Старый 05.04.2010, 18:47   #7
fs444
Форумчанин
 
Регистрация: 18.08.2009
Сообщений: 289
По умолчанию

Цитата:
Borland C++ надо понимать. Да, он не даст такое сделать.
Да уж, не дает =)

Цитата:
Код:
#include <stdio.h>

int main()
{
	static int a = 10;

	printf("%d\n", a);

	if (--a < 0) {
		return 0;
	}

	return main();
}
Выдает указанную в посте №4 ошибку.
fs444 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Аргументы функции main(); argc и argv Lunex.08 Общие вопросы C/C++ 7 15.09.2012 00:11
разбить программу на функции main и пользовательскую функцию Ferghost Общие вопросы C/C++ 2 31.05.2009 18:15
Функция main и main(void) Pord Помощь студентам 1 11.12.2008 15:57
Вызов функции MarSeON PHP 2 01.08.2008 20:22
Вызов функции по таймеру Lexicss Общие вопросы Delphi 4 30.05.2007 22:47