출력용 포인터를 쓸 때에 예외 처리 방법!
SEH를 사용한 코드
- void some_func5(DWORD *some_ptr)
- {
- __try
- {
- *some_ptr = 0x12345678;
- }
- __except(EXCEPTION_EXECUTE_HANDLER)
- {
- SetLastError(ERROR_INVALID_ACCESS);
- }
- }
<리스트 4>와 동일한 코드를 SEH로 작성한 것이 <리스트 5>의 코드다. 간단한 코드이기 때문에 코드만으로는 예외처리의 장점을 알기가 쉽지 않다. 단지 명확한 한 가지 단점은 복잡한 조건을 미리 생각하지 않아도 된다는 점이다. __try, __except 블록으로 인해 너무 복잡해 보인다거나, 예외처리 때문에 늦어진다고 불평을 할 수 있다. 하지만 이는 예외 처리에 대한 메커니즘을 정확하게 이해하지 못해서 발생하는 오류다. 우선 __try, __except 블록에 대해서 살펴보자. 분명히 <리스트 4>에는 그러한 것이 없다. 하지만 진짜 없는 것은 아니다. IsBadWritePtr이란 함수 속에 그 블록이 숨겨져 있을 뿐이다. 그렇다면 성능은 어떨까? <리스트 4>의 코드는 오류가 있건 없건 항상 IsBadWritePtr을 호출한다. 반면에 <리스트 5>의 코드는 그런 사전 검사에 드는 비용이 없다. 예외가 발생했을 때만 예외처리 코드가 수행된다. 따라서 <리스트 5>의 코드가 더 효율적이다.
SEH 사용법
http://serious-code.net/moin.cgi/SEH
A Crash Course on the Depths of Win32™ Structured Exception Handling
http://www.microsoft.com/msj/0197/exception/exception.aspx
위의 글은 제가 필요한 부분만 꺼내온 것이고 자세한 설명은 트랙백 주소의 블로그로 가보면 자세한 설명이 되어있습니다. ^^
예외처리를 할 때에 저와 같은 초보 프로그래머들은 assert나 null만 짚고 넘어가는 경우가 많습니다.
그렇지만 다른 버그를 잡을 수 없지요 .
관련 글을 보면 예외처리에 대해 상세히 잘 설명되어 있습니다. ^^
영진님의 노하우가 팍팍 느껴지는군요..
항상 좋은 글에 감사할 따름입니다. ^^
아.. 최근에 감기에 걸려서 죽겄네요 ㅠ
빨리 나았으면 좋겠습니다.
다른 분들도 감기 조심하시기를...
관련 글입니다. http://www.jiniya.net/tt/655
'승진이와 C > Programming Tip & Study' 카테고리의 다른 글
| 문자열의 입출력 (0) | 2007/11/30 |
|---|---|
| 가변인수에 대하여 간단 정리 (0) | 2007/11/30 |
| 비트 연산자의 연산 (0) | 2007/11/30 |
| C언어 포인터 정리 파일 (0) | 2007/11/30 |
| 출력용 포인터를 쓸 때에 예외 처리 방법! (2) | 2007/11/23 |
이올린에 북마크하기
이올린에 추천하기


