Notice
Recent Posts
Recent Comments
Link
마이라이프해피라이프
[C++] 예외 처리 (exception) 본문
예외 발생
코드를 작성하다 예외가 발생하면 일단 당황한다.
이럴 때 쓸 수 있는 게 바로 예외 처리(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;
}
'컴퓨터 > C++' 카테고리의 다른 글
[C++] 오류 - ']'가 필요합니다. (0) | 2021.11.10 |
---|---|
[C++] Visual Studio 2019 - C2760 에러 (0) | 2021.10.18 |
[C++] Debug Assertion Failed: _CrtIsValidHeapPointer(block) (0) | 2021.10.13 |