Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Экстренный выход из программы или процедуры!


Автор: Bart_Simpson 5.4.2007, 17:04
короче вот такой вот вопрос как мне выйти быстренько из проги или процедцры обработки если файл не налйден
Код

void File::open_read(const char* fName){
    fPtr=fopen(fName,"r");
    if (fPtr==NULL){
                    MessageBoxA(NULL,"File not found!","Erorr!",MB_ICONSTOP);                            
                    }
}    


break не подходит ашипки выдаёт!

Автор: zkv 5.4.2007, 17:11
используйте исключения, либо return,  либо exit() смотря откуда и куда собираетесь 

Автор: Daevaorn 5.4.2007, 17:11
На выбор:
Код

return;
exit(-1);

первая из функции, вторая из программы и функцииsmile

Автор: Xenon 5.4.2007, 17:25
Я бы советовал организовать концепцию исключений, то есть main код заключить в try-блок, а здесь кидать исключение, типа
Код

if (fPtr==NULL) throw "File not found";

В Catch , блоке можно вывести сообщение об ошибке.

Автор: vinter 5.4.2007, 17:48
Цитата

Экстренный выход 

тада лучше abort() smile 

Автор: Xenon 5.4.2007, 18:31
terminate() smile

Автор: Promitheus 6.4.2007, 09:29
Вообще говорят что catch и try это прошлый век и ими уже не пользуются для перехвата исключений. Позже приведу автора книги и название, если потребуется.

ИМХО: не найденный файл это не такое исключение чтобы его через catch try отлавливать. Я понимаю не найдена dll, версия не та компонента. Хотя на файле конечно проще тренироваться и отработать этот метод исключений.

Автор: ama_kid 6.4.2007, 09:47
Цитата(Bart_Simpson @  5.4.2007,  17:04 Найти цитируемый пост)
break не подходит ашипки выдаёт!

Break - это выход из цикла, а не из процедуры/функции/программы...

Автор: Earnest 6.4.2007, 09:47
Цитата(Promitheus @  6.4.2007,  10:29 Найти цитируемый пост)
Вообще говорят что catch и try это прошлый век и ими уже не пользуются для перехвата исключений.

Да ну? И чем же пользуются для перехвата исключений?

Автор: Vyacheslav 6.4.2007, 10:55
Цитата(Promitheus @  6.4.2007,  09:29 Найти цитируемый пост)
Вообще говорят что catch и try это прошлый век и ими уже не пользуются для перехвата исключений. Позже приведу автора книги и название, если потребуется.

Приведите, пожалуйста. Люблю на досуге почитать фэнтези. Такая игра разума просто завораживает

Автор: Partizan 6.4.2007, 11:05
тот самый случай, когда "аффтар жжот"? )

Автор: W4FhLF 6.4.2007, 12:47
Цитата(Earnest @  6.4.2007,  09:47 Найти цитируемый пост)
И чем же пользуются для перехвата исключений?


Наряду с SEH(структурная обработка исключения, все эти конструкции используют её) сейчас существует VEH(векторная обработка исключений). Может быть имелось ввиду именно это. 

Автор: JAnty 6.4.2007, 13:03
Цитата(vinter @  5.4.2007,  17:48 Найти цитируемый пост)
Экстренный выход 


ExitWindowsEx(EWX_SHUTDOWN | EWX_FORCE , 0); // кажысь
 smile 

Автор: Earnest 6.4.2007, 13:15
Эти вещи существуют параллельно, и ничем не лучше языковых исключений (try-catch). 
Более того, некоторые компиляторы могут поймать структурные исключения в блоке catch (...), что весьма удобно для единой обработки.

Автор: W4FhLF 6.4.2007, 14:39
Цитата(Earnest @  6.4.2007,  13:15 Найти цитируемый пост)
Эти вещи существуют параллельно, и ничем не лучше языковых исключений (try-catch). 


Компилятор встречая все эти языковые конструкции устанавливает SEH-фреймы. Это системный механизм.

Автор: Xenon 6.4.2007, 14:41
Значии C# - прошлый век smile Там же аналогичная конструкция исключений действует.

Автор: W4FhLF 6.4.2007, 14:57
Цитата(Xenon @  6.4.2007,  14:41 Найти цитируемый пост)
Там же аналогичная конструкция исключений действует.


Откуда ты знаешь? VEH может использоваться вместе с SEH. Ни то, ни другое не плохо, просто, как и везде, есть свои плюсы, преимущества и недостатки. 

Напоминаю, что VEH появился начиная с XP, поэтому прежде чем идти курить доки подумайте подойдёт ли Вам этоsmile

Автор: SparF 6.4.2007, 16:57
Promitheus, Название книги и автора в студию, пожалуйста)) оч. посмотреть хочется)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)