- void exit(int status); // 프로그램을 종료
// 성공시 EXIT_SUCCESS, 실패시 EXIT_FAILURE를 인수로 넣음
- assert(표현식) : 코드가 정확하기 동작할 수 있는 상황이라는 것을 확인
> 표현식을 인수로 전달 받아 참, 거짓을 점검
> 조건이 참이면 이 함수는 아무 일도 하지 않음
> 거짓이면 에러 발생 위치와 표현식 등으로 구성된 상세한 에러 메시지와 함께 강제로 종료
> 콘솔 프로젝트는 stderr 표준 출력으로 나타나지만, 그래픽 프로젝트에서는 대화상자로 출력
> 프로그램이 죽은 위치보다는 에러의 원인이 될만한 곳에 사용하여 미리 오동작 발견
> 조건부 컴파일로 정의되어 있는 매크로 함수 -> 프로젝트의 성능이나 크기와 상관이 없음
- assert문 주의 사항
> 디버거 버전에서만 컴파일 되므로 assert의 인수로는 생략해도 상관없는 조건식만 넣어야 함
> 절대로 발생해서는 안되는 조건에 대해서 사용하는 것 -> 정상적인 에러 상황을 처리하지 않음
(프로그램 종료가 필요하지 않은 경우는 사용하지 않고 if문으로)
> 가급적이면 한 조건당 하나의 assert를 사용하는 것이 좋음
- static_assert("constant-expression", "error-message"); // Modern C++
> 기본 타입이나 유저 정의 타입의 크기를 확인 하고 싶을 때 사용
> 어떤 타입의 최대 크기를 넘어서는 지 확인하고 싶을 때 사용
> 컴파일 타임 때 사용하여 프로그램 실행 전에 문제를 찾을 수 있음
> 템플릿 프로그래밍에 사용하면 특히 유용
[SEH(Structed Exception Handler)]
- Hardware Exception
> 하드웨어에서 인식( ex. Divide by zero )
> 예외를 알려주는 주체는 CPU가 담당
- Software Exception
> 소프트웨어에서 감지
> 개발자가 담당
- 종료 핸들러
> __try영역을 빠져나오더라도 __finally블럭이 반드시 실행
> ExitProcess, ExitThread, exit() 호출로 강제 종료시 실행 안됨
> RaiseException() : 직접 예외 발생
__try
{}
__finally
{}
- 예외 핸들러
> 예외가 발생하면 자동으로 __except 구문이 실행
> GetExceptionCode()로 예외가 무엇인지 알 수 있음
__try
{}
__except(EXCEPTION_EXECUTE_HANDLER)
{}
- try, throw, catch
> try : 예외가 발생할 만한 코드 블록을 지정, 블록에서 예외가 발생했을 때 throw 명령으로 예외를 던진다.
> throw : 예외를 던지며 throw 다음에 던지고자 하는 예외를 적는다. 예외를 던지면 예외가 발생 되었다는 것을 알리며, 이 예외를 처리하는 catch문으로 점프하도록 한다. throw 아래 코드는 모두 무시 (타입에 따라 오버로딩 됨, call 보다는 goto와 가까움)
> catch : try 블록 다음에 이어지며 던져진 예외를 받아 처리. catch블록을 예외 핸들러라고 함. catch 다음에는 throw에서 던져지는 예외 타입을 적음
try
{
if(예외조건) throw 예외객체;
}
catch (예외객체)
{
예외처리;
}
> 함수 안에서는 throw만 사용해도 됨
> 중첩 가능
'programing > C++' 카테고리의 다른 글
음성 채팅 구현 (0) | 2017.01.20 |
---|---|
[Modern C++] RValue Reference (0) | 2016.12.29 |
형변환 연산자 오버로딩 (0) | 2016.12.06 |
explicit (0) | 2016.12.05 |
Effective C++ (0) | 2016.12.04 |