Как завершить программу из функции, которая вызывается в другой функции (C ++) - PullRequest
1 голос
/ 19 марта 2019

У меня есть цикл функций, которые я вызывал как код, который я написал ниже, и я хочу в какой-то момент завершить программу. Проблема в том, что я не хочу использовать функцию выхода, потому что у меня есть данные, выделенные динамически, и я Я мог бы использовать if в каждой функции и выходить по очереди, но я думаю, что код будет намного сложнее для понимания, и у меня более 3 таких функций.

void c()
{
     //code
     //I want to exit the program
}

void b()
{
     c();
     //code
}

void a()
{
     b();
     //code
}

int main()
{
     a();
     return 0;
}

Спасибо за помощь.

Ответы [ 2 ]

1 голос
/ 19 марта 2019

Внутри ваших функций используется std::unique_ptr везде, где вам нужно динамическое распределение.

Затем измените:

int main()
{
     try
     {
          a();
     }
     catch(...) 
     { /*... */} 
     return 0;
 }

Тогда внутри любой из функций deep можно использовать throw, и std::unique_ptr автоматически освободит ресурсы .

1 голос
/ 19 марта 2019

Вы можете return из всех функций вплоть до main (самый хороший).

Вы можете назвать какой-нибудь вариант exit.

Вы можете выбросить исключение.

Вы можете использовать setjmp / longjmp, чтобы перейти к концу main (пожалуйста, не надо).

Вы можете завершить работу приложения (позвонив по номеру abort, raise(SIGKILL) или подобному).

Я не могу придумать больше вариантов, но вполне может быть что-то ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...