2015-09-26 2 views
-1

Вообще у меня есть некоторые функции step1step2 ... и они называются последовательно:Завершить всю программу в начале C?

int main() 
{ 
    ... 
    step1(); // something wrong detected and need to break out of the whole program 
    step2(); 
    step3(); 
    ... 
} 

Как я могу выйти из step1 и пропустить всю остальную часть кода, чтобы прекратить main() функцию?

В настоящее время я могу думать только о настройке глобальной переменной, как bool isErr как флаг, так что

step1(); // error detected and isErr is set to 1 inside step1() 
if (isErr) 
    return; 
step2(); 
... 

Есть ли лучше или больше «канонические» подходы?

КСТАТИ Я слышал, что goto плохо, поэтому я отказаться от него :)

+2

Возможный дубликат [Как выйти из программы на C++?] (Http://stackoverflow.com/questions/1116493/how-to-quit-ac-program) – usr1234567

+0

Если проблема связана с некоторыми потоками данных, которые вы хотел бы, чтобы пользователь мог проверить, 'std :: abort()' может быть хорошей идеей, поскольку он выходит из процесса с сигналом и может заставить хост создать дамп ядра (что делает ситуацию отлаживаемой несколькими способами). –

+0

C не C++ не C! Выбери один! – Olaf

ответ

3

Один из вариантов - проверить возвращаемое значение вашей функции step1(), и если это ошибка, просто используйте, например, return 1 в main. Использование return (с соответствующим кодом состояния) от main для завершения программы является предпочтительным способом на C++.

Другая опция exit. Дело в том, что вы можете называть его в любом месте кода. Тем не менее, в C++ exitnot рекомендуется так много. Что касается C, возникает вопрос here, в котором обсуждается, является ли использование exit в C хорошей идеей или нет.

1

Вы можете использовать функцию exit(), чтобы прервать процесс в любой момент step1(), step2() ... где-нибудь на самом деле.

2

Использование

exit(1); 

Число указывает на состояние выхода. 0 не является ошибкой, все больше, чем 0, указывает на ошибку.

+2

Единственными переносимыми значениями возврата в C являются 'EXIT_SUCCESS' и' EXIT_FAILURE' (но не '1'). –

+1

EXIT_FAILURE определяется как 1 –

0

exit прекратит выполнение программы, где бы вы ни были, но в большинстве случаев это плохая идея, проверка возвращаемого значения функции и обработки (например, выход в вашем случае) - это более чистый способ сделать это (нет необходимости для глобальных таблиц)

Смежные вопросы