Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
nexen
187 / 180 / 3
Регистрация: 27.01.2012
Сообщений: 1,335
#1

Выйти из нескольких функций - C++

03.01.2014, 10:03. Просмотров 1424. Ответов 22
Метки нет (Все метки)

Необходимо при определенном условии выскочить из косвенной рекурсии. Конечно, можно сделать это монструозно, но, полагаю, есть возможность выйти изо всех эти функций безо всяких глобальных переменных и тучи if при каждом косвенном вызове на проверку этого глобального флага?
Исключения использовать нельзя.

Я бы сделал это через goto, но насколько это правильно? Разворачивает ли goto стэк? Мне кажется, что нет.. Но может я ошибаюсь?

Так бы это выглядело с goto:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
void f1()
{
f2();
}
void f2()
{
if (..)
goto HERE;
f1();
}
int main()
{
f1();
HERE:
doSomethingElse();
}

Не по теме:

Пожалуйста, не надо кричать "использование goto = быдло код"..

0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.01.2014, 10:03
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Выйти из нескольких функций (C++):

Работа с файлом из нескольких функций - C++
Здравствуйте. Нужно печатать в 1 файл из нескольких функций. Предположим есть функция main void main() { ofstream...

Объявление нескольких функций в head.h - C++
Помогите разобраться. Ниже приведенный код работает у меня. Но меня мучают сомнения, что помещать несколько функций в заголовочный файл...

Возвращение из функций нескольких значений - C++
Доброго времени суток. Нужна помощь. Дано задание: Напишите функцию swap(int& a, int& b, int& c), которая изменяет значения параметров по...

Программирование задач с использованием нескольких функций - C++
всем доброго времени суток! вроде код правильный, помогите найти ошибку!! #include <iostream.h> #include <math.h> double...

Решение задачи с применением нескольких функций - C++
Помогите с решением :) Написать программу решением задачи с помощью нескольких функций. Значения элементов динамического массива...

Функция, в функции main() или общие переменные для нескольких функций - C++
Делаю мелкую игрушку, в консоли, ради забавы и столкнулся с 1 проблемой: Невозможно, создавать функцию в функции, вынеся эту функцию за...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
nexen
187 / 180 / 3
Регистрация: 27.01.2012
Сообщений: 1,335
03.01.2014, 13:47  [ТС] #16
Tulosba,
Цитата Сообщение от nexen Посмотреть сообщение
Да и так забавно, когда описываешь задачу, а тебе говорят:"изменяй условия задачи! Не используй это и это, а используй это и это" :\
0
taras atavin
Ушёл с форума.
3569 / 1753 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
03.01.2014, 13:53 #17
Цитата Сообщение от nexen Посмотреть сообщение
Да и так забавно, когда описываешь задачу, а тебе говорят:"изменяй условия задачи! Не используй это и это, а используй это и это" :\
Не путай задачу с количеством ифов.
0
Tulosba
:)
Эксперт С++
4396 / 3239 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
03.01.2014, 13:58 #18
nexen, когда условие задачи состоит в том, чтобы забить шуруп отверткой, то условие задачи безусловно надо менять.
1
iifat
2235 / 1388 / 103
Регистрация: 05.06.2011
Сообщений: 3,822
03.01.2014, 14:04 #19
Ну, в Цэ есть ещё setjump/longjump, так, кажись. По сути дела, исключения для бедных — для бедных Цэшников. Если и этого нельзя, только if — насколько помню, обычный goto разрешён только в пределах одной функции. Именно потому, что не делает возвратов.
0
taras atavin
Ушёл с форума.
3569 / 1753 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
03.01.2014, 14:10 #20
Если ты корень диска что то кинул, то это ещё не значит, что и остальные поступили также. У линуксоидов, например, нет самого диска. Да и на винде очень не рекомендуется захламлять корень.
0
MrGluck
Модератор
Эксперт CЭксперт С++
7239 / 4407 / 642
Регистрация: 29.11.2010
Сообщений: 11,929
03.01.2014, 15:15 #21
Необходимо реализовать логику на предикатах в колбэках.
0
outoftime
║XLR8║
510 / 432 / 33
Регистрация: 25.07.2009
Сообщений: 2,295
03.01.2014, 17:52 #22
Ппц, начинаем думать:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
void f1()
{
    f2();
}
void f2()
{
    if (..)
    goto HERE;
    f1();
}
int main()
{
    f1();
    HERE:
    doSomethingElse();
}
 
// equal to
 
void bar()
{
    foo();
}
 
void foo()
{
    if (true) return;
    bar();
}
Это в случае если функции действительно без возвращаемых значений.
0
Nfnehtdbx2
0 / 0 / 0
Регистрация: 25.12.2013
Сообщений: 8
03.01.2014, 18:17 #23
а break не пробовали?

Добавлено через 1 минуту
Ну или применить алгоритм метки
label1:
label2:
...
это позволяет выйти из многовкладенных циклов по условию

Добавлено через 4 минуты
Опыт это не имя которое дано ошибкам
Есть люди ошибаются на одном и том же 1000 раз и не понимают... вот тут то!
именно понимают!
опыт это то что человек понял и реализовал
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.01.2014, 18:17
Привет! Вот еще темы с ответами:

Подключение с помощью директивы #include нескольких функций, находящихся в разных файлах. - C++
Здравствуйте, уважаемые программисты. Помогите, пожалуйста, разобраться в такой ситуации: есть несколько функций, каждая из которых...

Написать набор функций, обслуживающих блочно-диагональные матрицы из нескольких нижне-треугольных блоков - C++
Написать набор функций (create,access,destroy), обслуживающих блочно-диагональные матрицы из нескольких нижне-треугольных блоков порядка...

Выйти из goto. - C++
Работаю в С++. Было задание написать программу с использованием goto. Вот код: ...

Как выйти из программы - C++
Написав щось подібне калькулятору. Але що написати щоб вийти з консолі?? буду вдячний. І ще наприклад для повернення в голову...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
03.01.2014, 18:17
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru