Programming Language/C++

15-3 Stack Unwinding(스택 풀기

JTesseract 2019. 6. 27. 15:52

스택풀기 : 예외가 처리되지 않아서, 함수를 호출한 영역으로 예외 데이터가 전달되는 현상

-예외가 처리되지 않아서, 예외 데이터가 main함수에 도달하고, main함수에서조차 예외을 처리하지 않으면, terminate함수(프로그램을 종료시키는 함수)가 호출되면서 프로그램이 종료되어 버림

 

<처리되지 않은 예외의 전달>

-함수 내에서 함수를 호출한 영역으로 예외 데이터를 전달하면, 해당 함수는 더 이상 실행되지 않고 종료가 됨

 

 

<예외상황이 발생한 위치와 예외상황을 처리해야 하는 위치가 다른 경우>

- 이러한 경우, 예외가 발생한 원인이 되는 데이터가 외부에서 들어온 것이기 때문 예외를 외부로 넘겨서 외부에서 처리하는 것이 맞음

 

throw한 예외데이터의 자료형이 catch에서 받는 예외데이터 자료형 매개변수의 자료형과 일치하지 않는 경우

-자료형의 불일치로 인해서 예외는 처리되지 않고, 해당 함수를 호출한 영역으로 예외 데이터가 전달됨(외부로 넘겨짐)

 

 

<하나의 try블록과 다수의 catch블록>

-하나의 try블록 내에서 유형이 다른 둘 이상의 예외상황이 발생할 때 사용

 

<전달되는 예외의 명시>

-개발자가 이 함수에서 일어나는 예외는 int형, char형과 관련된 예외일거라는 표현을 하는 것

-but, 다른 자료형의 예외 데이터가 전달될 경우 termiante함수의 호출로 인해서 프로그램 종료됨(왜냐하면 프로그램을 종료시켜서 문제의 원인을 찾고 또 발생 가능한 예외의 유형을 정확히 점거하도록 유도하는 것이 훨씬 바람직해서)

 -함수의 선언에 명시되지 않은 예외가 전달되면 unexpected라는 이름의 함수가 호출되고 이 함수의 기능은 terminate  함수의 호출임

-전달되는 예외의 자료형을 명시하는 부분을 비워놓으면 어떠한 예외도 전달하지 않음을 의미함