스택 풀기
스택 풀기 (Stack Unwinding)
어떤 함수를 호출 했는데 그 함수안에서 throw절이 실행되어 예외가 발생했다. 그런데 이 함수내에는 예외처리를 위한 try~catch 블럭이 존재하지 않는다면 예외처리는 그 함수를 호출한 영역으로 넘어가게 된다.
#include <iostream>
using namespace std;
void divide(int num1, int num2) {
if (num2 == 0) {
throw num2; // 예외 발생
}
cout << "몫 : " << num1 / num2 << endl;
cout << "나머지 : " << num1 % num2 << endl;
}
int main() {
int num1, num2;
cout << "두개의 수를 입력 : ";
cin >> num1 >> num2;
try { // 예외 상황이 발생할수 있는 부분
divide(num1, num2);
cout << "나눗셈 완료" << endl;
}
catch (int err) { // int 자료형을 받아서 처리한다.
cout << "나누는 수는 " << err << "이 될 수 없습니다." << endl;
cout << "프로그램을 다시 시작하세요." << endl;
}
cout << "프로그램을 종료합니다." << endl;
return 0;
}예외처리가 되지 않아서 함수를 호출한 영역으로 예외 데이터가 전달되는 현상을 "스택 풀기"라고 한다.
하나의 try블럭과 다수의 catch블럭
모든 예외 검출
catch의 매개변수를 엘립스(...) 으로 표현하면 모든 종류의 예외를 포착할 수 있다.
Last updated