마이라이프해피라이프

[C++] 예외 처리 (exception) 본문

컴퓨터/C++

[C++] 예외 처리 (exception)

YONJAAN 2021. 10. 17. 01:58

예외 발생

 

코드를 작성하다 예외가 발생하면 일단 당황한다.

이럴 때 쓸 수 있는 게 바로 예외 처리(exception handling)이다. 

 

예외 처리에 필요한 try, catch, throw

 

- try: 예외가 발생할 것 같은 코드를 감싸며 이 안에서 오류가 발생했을 시 throw()를 통해 오류 발생을 알림. 

- catch: try에서 오류가 발생하면 catch에서 잡음. 가장 가까운 catch로 이동.

void f {
	if (조건)
    	throw (); //error 던짐
}


int main() {
	try 
    {
    //try로 묶은 코드
   .. f 실행
    }

	catch { 
	 ..
	}
    
    return 0;
}

 

what 함수

- 예외 에러 원인 메세지 리턴. 

- 리턴 타입: const char * 

 

만약 코드에 try, catch는 없고 throw만 있는 경우 

 

- throw()로 날려준 에러를 잡지 못하면 abort() 함수를 수행하고 종료된다. (에러 화면 뜸)

 

throw myclass();

 

- class를 만들어 예외를 처리할 수 있다. 아래 코드는 try, catch가 없기 때문에 abort() 함수가 실행된다. 

myclass {}; //class 생성

throw myclass();

 

예제 소스 코드 

https://docs.microsoft.com/ko-kr/cpp/cpp/errors-and-exception-handling-modern-cpp?view=msvc-160 

#include <stdexcept>
#include <limits>
#include <iostream>

using namespace std;

void MyFunc(int c)
{
    if (c > numeric_limits< char> ::max())
        throw invalid_argument("MyFunc argument too large.");
    //...
}

int main()
{
    try
    {
        MyFunc(256); //cause an exception to throw
    }

    catch (invalid_argument& e)
    {
        cerr << e.what() << endl;
        return -1;
    }
    //...
    return 0;
}