Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

cl.exe로 컴파일할 때

97 views
Skip to first unread message

PG

unread,
Mar 3, 2007, 7:41:58 AM3/3/07
to
어떤 한 책에서는 작성된 console 프로그램을 컴파일 할 때
/EHsc 옵션으로 컴파일 합니다.
그래서 cl.exe /?로 옵션을 확인했습니다.

/EHc extern "C" defaults to nothrow
/EHs enable synchronous C++ EH
/EHa enable asynchronous C++ EH

여러 옵션 중 다음과 같은 옵션이 있습니다.

/EHc 는 nothrow 라는 말이 무슨 말인지 모르기 때문에 이해가 안 됩니다.
얼핏 디폴트로 C를 불른다는 것 같습니다. 예외 적용을 안 한다는
건가?

/EHs와 /EHa 는 동기, 비동기 C++를 사용한다는 것 같은데
EH라는 말이 있어서 무슨 말인지 이해가 안 됩니다.

급한 마음에(마음만) 모 사이트에 지식을 빌렸지만 아직 답변을 받지 못했습니다.
그래서 cl.exe가 MS 꺼니 여기서 질문을 해 봅니다.
MS 사이트에서 찾자니 영문이 워낙 많아서 쉽게 찾지를 못하는 바람에
여기서 질문을 해 봅니다. 책을 찾자니 요즘 돈이 없어서리 ㅋㅋ

--------------------------------------------
한 늙은 백수가 직장을 구하기 위해 공부를 하면서


TheOne

unread,
Mar 3, 2007, 8:57:53 AM3/3/07
to

http://msdn2.microsoft.com/ko-kr/library/1deeycx5(VS.80).aspx

a
비동기(구조적) 예외 및 동기(C++) 예외를 catch하는 예외 처리 모델입니다.
s
C++ 예외만 catch하고 컴파일러가 extern C 함수에서 예외를 throw하는 것으로 가정하도록 하는 예외 처리
모델입니다.
c
s와 함께 사용하면(/EHsc) C++ 예외만 catch되며 컴파일러는 extern C 함수에서 C++ 예외를 throw
하지 않는 것으로 가정합니다. /EHca는 /EHa와 동일합니다.

이렇게 되어 있네요.

PG

unread,
Mar 3, 2007, 11:06:07 AM3/3/07
to
"TheOne" <daewo...@gmail.com> wrote in message
news:1172930272....@t69g2000cwt.googlegroups.com...

우와~ 정말 감사합니다.
아직 구체적인 파악은 하지 못했지만 대충은 이해가 갈 꺼 같습니다.
제가 아직 예외에 대한 많은 공부를 하지 못해서요.
예외에 대한 것은 자바 밖에 공부를 하지 않아서입니다.
자료 찾아 주셔서 정말 감사합니다.
MSDN이 한글화가 무지 잘 되어 있네요. 머나면 옛날 영문 밖에 못봐서 무척
애먹었는데
링크를 보니 제가 공부를 워낙 안 했구나 하는 생각이 드네요.

그런데 nothrow는 MS가 만든? 어디서 만들어졌는지는 모르지만 신조어 같습니다.
추측하건데
예외를 throw 라 표현하는가 보군요. 그래서 예외를 잡지 않는 걸 nothrow라
하는 것 같은데?

제 생각이 맞는지 궁금합니다.

TheOne 님 감사합니다.
========================
theOne? 혹 담배? ㅋㅋ


Shin, YoungJin

unread,
Mar 4, 2007, 3:01:47 AM3/4/07
to
throw는 예외를 던진다는 말 입니다. 예외가 발생한 시점에서 그 예외를
처리하기에 적합하지 않기 때문에 thorw로 예외를 던지죠. 그럼 예외 프레임을
따라 거슬러 올라가다 catch가 있는 곳에서 그 예외가 처리됩니다. nothrow란
예외를 던지지 않는다는 말이죠. 예외가 발생해도 밖으로 전파를 시키지 않는 것
입니다.

Windows 시스템에서 C++로 프로그램을 작성하면 두 가지 예외처리 매커니즘을
사용할 수 있습니다. C++ 예외와 구조적 예외 처리(SEH)가 그것입니다. 이 경우에
/EHa 옵션을 사용하면 catch(...)에 C++예외와 SEH가 모두 잡힙니다. 반면에 다른
옵션에서는 C++ 예외만 잡힙니다.

"PG" <pic...@yahoo.co.kr> wrote in message
news:Ottuc3aX...@TK2MSFTNGP03.phx.gbl...

PG

unread,
Mar 4, 2007, 10:17:24 AM3/4/07
to

"Shin, YoungJin" <p...@jiniya.net.korea> wrote in message
news:OA$0UNjXH...@TK2MSFTNGP03.phx.gbl...

> throw는 예외를 던진다는 말 입니다. 예외가 발생한 시점에서 그 예외를
> 처리하기에 적합하지 않기 때문에 thorw로 예외를 던지죠. 그럼 예외 프레임을
> 따라 거슬러 올라가다 catch가 있는 곳에서 그 예외가 처리됩니다. nothrow란
> 예외를 던지지 않는다는 말이죠. 예외가 발생해도 밖으로 전파를 시키지 않는
> 것 입니다.
>
> Windows 시스템에서 C++로 프로그램을 작성하면 두 가지 예외처리 매커니즘을
> 사용할 수 있습니다. C++ 예외와 구조적 예외 처리(SEH)가 그것입니다. 이
> 경우에 /EHa 옵션을 사용하면 catch(...)에 C++예외와 SEH가 모두 잡힙니다.
> 반면에 다른 옵션에서는 C++ 예외만 잡힙니다.
>

좀 더 자세한 설명 감사합니다.
추가 설명을 들으니 C++에서 예외를 아직 다루지는 못해도
대략 컴파일 옵션에 따라 이렇게 흐르는구나 하는 정도는 파악했습니다.


0 new messages