2012-10-26 6 views
1

goto와 같이 try-catch를 사용하는 것이 좋습니까? 예를 들어 , 간단한 코드 (전반적으로 언어에 독립적 의미에서와 같이,) 일반적으로try {...} 사용 (..) {...} 대신 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(); 
} 
+0

이것은 'c'와 관련이 없습니다. –

+1

[흐름 제어를위한 예외 사용] 가능한 복제물 (http://stackoverflow.com/questions/9306913/using-exceptions-for-flow-control) – Andrey

+3

일반적으로 'goto'를 사용하는 것은 좋지 않지만 당신은'goto'를 사용하기를 원합니다, 예외 처리가 실제로 그것을 악화시키는 것처럼 그것을 위장합니다. –

답변

5

프로그램 흐름에 예외를 사용하는 것이 잘못된지 묻는 질문에 대답은 예, 잘못되었습니다입니다.

그렇다면 성능에 대해별로 신경 쓰지 않는 경우 인터넷에있는 사람에게 말하지 않는 한 멀리에서 벗어날 수 있으며 제작을하지 않는 한 요구 사항 또는 장기간 유지 관리 요구 사항.

이 경우 최종 성공 사례를 제외한 모든 경우에 예외가 올바르게 사용되고있는 것으로 보입니다.

+2

-1 당신이 틀렸기 때문에,하지만 제쳐두고,이 질문이 그걸 닫을만큼 건설 적이 지 않은 것 같으면 왜 대답 했습니까? –

+0

@ JohnDibling : 내 대답의 어느 부분에 동의하지 않았는지 표시하십시오. –

+0

* 프로그램 흐름 이외의 다른 예외를 사용하는 것에 대해서는 생각할 수 없습니다. 'try/catch'는 제어 흐름 구조입니다. 영원한 논쟁은, 어떤 조건이 그것을 사용하는 것을 보증하기에 "충분히 예외적 인"것으로 간주되는지입니다. –

1

는 제어 흐름 관리 지원으로 시도/캐치 메커니즘을 사용하는 나쁜 관행입니다. 예외를 관리하기 위해 의도 된대로 사용하십시오. 제어 흐름 구성을 사용하여 흐름을 제어하십시오.