예외처리에서 궁금한게 있어요

impactlife의 이미지

보통 자바나 다른 프로그램들에서는 특정예외 처리 외에 그밖의 예외는 통합적으로 처리할 수 있도록

try{
...
}catch(IOException ie){
IO예외 처리
}catch(NullPointerException ne){
널포인트 예외 처리
}catch(Exception e){
그밖의 예외 처리
}

이렇게 가장 부모예외클래스로 다형성을 이용해서 예외처리가 가능한데요
c++에서는 이걸 어떻게 처리하나요?

try{
s = 10 / 0;
}catch(...){
cout << "에러발생!" << endl;
}

이것도 안되고

try{
s = 10 / 0;
}catch(std::exception &e){
cout << "에러발생!" << endl;
}

이것도 안되네요.
예외처리는 안되고 런타임에러가 나더라구요.
어떻게 해야 될까요?

impactlife의 이미지

0으로 나누는건 예외가 아니라 그 자체로 에러인가요?

klara의 이미지

impactlife의 이미지

제가 가방끈이 짧아 영어가 딸려서 해석을 잘못했을 수도 있지만 나름 해석해보면
결론은 catch(...) 을 이용하면 된다고 하는거 같은데요 그래도 안되네요
예제문은 모두 예외상황을 모두 예측해서 throw 던지고 있는데
그렇게 예상해서 다 코딩해놔야 하는건지요?

set_terminate 라는 함수를 이용하면 되긴되는데 예외를 잡고 나서 프로그램 종료를 시키지 않으면 런타임에러는 그대로 나네요.
에러가 난걸 처리하고 그 다음 런타임에러를 무시할 수만 있다면 좋은데...

kukyakya의 이미지

표준에서는 0으로 나눔 에러를 익셉션으로 정의하고 있지 않습니다. 익셉션이 아닌 것을 try-catch로 잡으려고 하시니 원하는 대로 동작하지 않는 것입니다.

꼭 익셉션으로 0으로 나눔 에러를 처리하시려거든 실제 나누는 값이 0인지를 확인해서 직접 익셉션을 던지시는 것이 좋을 것 같습니다.

try {
   if(a == 0) throw std::runtime_error("divide by 0");
   s = 10 / a;
}
catch(std::runtime_error e) {
}
impactlife의 이미지

표준에 없는거군요.
뭐 안되는걸 어쩌겠냐만 덕분에 확실히 알게 되어 감사합니다.
고맙습니다.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.