자료형이 일치하지 않아도 예외 데이터는 전달된다.


int Simple(void)

{

...

try

{

if(...)

throw -1;    // int형 예외 데이터

}


catch(char expn)    {...}    // char 형 예외 데이터를 전달하라.

}


이 경우, 자료형의 불일치로 인해서 예회는 처리되지 않는다.(catch 블록으로 값이 전달되지 않는다.) 따라서 Simple 함수를 호출한 영역으로 예외 데이터가 전달된다.







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


- 하나의 try 블록 내에서 유형이 다른 둘 이상의 예외상황이 발생할 수도 있고, 이러한 경우 각각의 예외를 표현하기 위해 사용되는 예외 데이터의 자료형이 다를 수 있기 때문에, try 블록에 이어서 등장하는 catch 블록은 둘 이상이 될 수 있다.








전달되는 예외의 명시


- 함수 내에서 발생할 수 있는 예외의 종류도 함수의 특징으로 간주된다. 따라서 이미 정의된 특정 함수의 호출을 위해서는 함수의 이름, 매개변수 선언, 반환형 정보에 더해서, 함수 내에서 전달될 수 있는 예외의 종류(예외 데이터의 자료형)과 그 상황도 알아야 한다. 

그래야 해당 함수의 호출문장을 감싸는 적절한 try~catch 블록을 구성할 수 있다.



"즉, 함수를 정의할 때에는 함수 내에서 발생 가능한 예외의 종류를 명시해 주는 것이 좋다."



throw(int, char) 선언은 함수 내에서 예외상황의 발생으로 인해, int형 예외 데이터와 char형 예외 데이터가 전달될 수 있음을 알리는 것이다.

물론 위와 같이 함수가 선언되면, 함수로부터 int형 예외 데이터와 char형 예외 데이터만이 전달되어야 하며, 다른 자료형의 예외 데이터가 전달될 경우 terminate 함수의 호출로 인해서 프로그램은 종료되고 만다.






전달되는 예외의 자료형을 명시하는 부분이 비어있다. 

즉, 이는 어떠한 예외도 전달하지 않음을 의미한다. 따라서 위의 함수가 예외를 전달할 경우 프로그램은 그냥 종료가 된다.



※ unexpected 함수

- 함수의 선언에 명시되지 않은 예외가 전달될 경우 unexpected라는 이름의 함수가 호출이 되며, 이 함수의 기본 기능은 '프로그램의 종료(terminate 함수의 호출)'이다. 때문에 명시되지 않은 예외가 전달될 경우 프로그램이 종료되는 것이다.

Posted by scii
: