Использование try {…} catch (..) {…} вместо goto

Это плохая практика использовать try-catch как goto?
Например, простой код

try{
if(argc<2){
std::cout<<"no inputfile"<<std::endl;
throw 1;
}
STARTUPINFO cif;
ZeroMemory(&cif,sizeof(STARTUPINFO));
PROCESS_INFORMATION pi;
if(FALSE==CreateProcess(argv[1],NULL,NULL,NULL,FALSE,NULL,NULL,NULL,
&cif,&pi)){
printf("smth is wrong");
throw 1;
}
WaitForSingleObject(pi.hProcess, INFINITE);
GetExitCodeProcess(pi.hProcess, &exitCode);
std::cout<<"Process return"<<exitCode<<std::endl;
throw 1;
}
catch(int a){
printf("press Enter");
getchar();
}

1

Решение

Если вы спрашиваете, правильно ли использовать исключения для выполнения программы, ответ да это неправильно.

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

В этом случае вы, кажется, правильно используете исключения для всего, кроме последнего, успешного случая.

5

Другие решения

В целом (как в не зависящем от языка смысле по всем направлениям) использование механизма try / catch в качестве средства управления потоком управления является плохой практикой. Используйте его по назначению для управления исключениями. Используйте конструкции потока управления для управления потоком.

1

По вопросам рекламы [email protected]