1. 기존의 예외처리 방식
int main(){
int a,b;
cout<<"두개의 숫자입력 :";
cin>>a>>b;
if(b==0) //예외상황이 발생을 한다면
cout<<"오류"<<endl;
else{
cout<<"a/b의 몫 :"<<a/b<<endl;
cout<<"a/g의 나머지 : "<<a%b<<endl;
}
return 0;
}
if문은 예외 처리 이외의 기능도 하기때문에 다른사람이 그 소스코드를 봤을때 분석하기가 힘들다.
2. C++ 예외처리 메커니즘
기본적인 예외 처리 메커니즘 (try,catch,throw)
try{
//예외 발생 예상 지역
}
catch(처리되어야 할 예외의 종류){
//예외를 처리하는 코드가 존재할 위치
}
//예외 발생 예상 지역
}
catch(처리되어야 할 예외의 종류){
//예외를 처리하는 코드가 존재할 위치
}
catch블록은 항상 try 블록의 바로 뒤에 등장한다 try와 catch는 한문장으로 간주한다.
try블록 내에서 발생하는 예외 상황은 catch블록에 의해서 처리된다.
int main(){
int a,b;
cout<<"두개의 숫자입력:";
cin>>a>>b;
try{
if(b==0)
throw b; // b를 가리켜 예외라고 한다
cout<<"a/b의 몫 : "<<a/b<<endl;
cout<<"a/b의 나머지 : "<<a%b<<endl;
}
catch(int exception){
cout<<exception<<"입력."<<endl;
cout<<"입력오류"<<endl;
}
try블록에서 발생한 예외의 상황은 throw에 의해서 catch로 전달되어 처리된다.
전달이 되는 예의와 받아주는 변수의 자료형이 일치를 해야한다.
예외가 발생되면 try블록의 나머지 블록은 실행되지 않는다. 아래문장들은 실행이 되지 않고 catch의 블록 문장이 실행된후 종료된다.
3. 스택풀기
예외가 발생하였는데 그 예외를 처리해줄 try~catch문이 없다면 발생한 예외는 호출발생시킨 함수를 호출한 영역으로 전달된다.
----------------------------------------------------------------------------------------
위의 예제와 같은 예외의 처리방식은 스택에서 메모리가 해제 되는 방식과 같다하여 스택풀기
라고도 한다.
별..-_-;;
예외가 처리가 되지 않으면 stdlib 헤더 파일에 있는 abort함수가 호출되면서 프로그램은 종료된다
catch블록에 예외가 전달되는 방식