switch문의 이상현상 가능성?

puaxx의 이미지

아무리 소스코드를 봐도 문제는 없고(소스코드를 마르고 닳도록 본것 같군요.), 발생할 가능성은 switch문에서 엉뚱한 곳으로 진입한다는 것밖에 생각할수 없는 상황이다 보니....아무튼 원인이 안보이다 보니 별의별 생각을 다하게 되는군요.

컴파일러는 borland c++ 3.1 이구요.OS는 DOS입니다.

switch(input_code){
case 1:
case 2:
case 3:
case 77:
}

특이사항은 case 1,2,3까지는 break문이 없습니다. 그리고 default문도 없구요. 요지는 input_code가 77이나 3일때 case 2번이나 case 1번으로 진입할 가능성이 있느냐는 것인데요. 만약에 그렇다면 모든 문제가 이것하나로 설명이되는 상태인데....

논리적으로나 물리적으로나 아무리 따져봐도 저런일이 발생할 가능성은 거의 0에 가깝다는것이 저를 괴롭게 만든다는 것입니다.

의견좀 부탁드리겠습니다.

SoulreaveR의 이미지

기계어로 번역이 되면 저 순서가 반드시 보장이 되는지 잘 모르겠군요... 어떠한 이유로 case 1:과 case 77:의 순서가 바뀌어서 번역이 된다면(컴파일러의 입장에서는 그렇게 해도 의미상에는 변화가 없고 성능상 더 좋다고 판단 될 경우) 그런 경우가 생길지도 모르지요.

M.W.Park의 이미지

break가 없는 것은 의도적으로 그렇게 쓸 수는 있지만 별로 좋은 스타일은 아닙니다.
또한 주석등으로 break를 의도적으로 뺐다고 알려주는 것이 좋구요.

switch의 동작이 이상한것같다면, 동등한 nested if로 바꿔서 테스트해보시는 것이 좋겠네요.

-----
오늘 나의 취미는 끝없는, 끝없는 인내다. 1973 法頂

-----
오늘 의 취미는 끝없는, 끝없는 인내다. 1973 法頂

select99의 이미지

여테까지 봐도 그런경우는 없습니다..
예시가 좀더 명확했으면 더 정확한답이 나왔을텐데말이죠..

tobetter의 이미지

예시가 정확하지 않아서 확실하진 않네요.
그런 경우를 당한 적은 없습니다만...
디버깅정보 집어넣고 컴파일한 후 역어셈블해서 해당 switch문을 보면 정확하게 알 수 있을 것 같네요.

체스맨의 이미지

"77이나 3일때 case 2번이나 case 1번으로 진입할 가능성이 있느냐"

위 코드에서 절대로 그럴 수 없습니다. 만일 그렇게 실행한다면 그 컴파일러는 엉터리 컴파일러입니다. 제가 아는한 bc31 이 그런 컴파일러는 아닙니다.

도스 환경이라면 segfault 에 둔감하기 때문에, switch 문 실행 전에 어떤 이유에서든 발생한 오류가 실행에 영향을 미쳤을 겁니다.

Orion Project : http://orionids.org

김일영의 이미지

재현이 어느정도 되는 경우라면 디버거로 추적해보심이;;;

김일영의 이미지

재현이 어느정도 되는 경우라면 디버거로 추적해보심이;;;

엥? 왜 2개가 올라왔지? 이런 이런 게시판 버그;;;

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.