회사 안에서 goto 문을 사용합니까?

익명 사용자의 이미지

어쩔 수 없는 상황이면 써두 상관없지만, 아닌 경우는

지양해야 하는게 맞는거겠죠?

헐... 급 궁금하네염...

그 어쩔 수 없는 상황이 중요한거겠쬬?ㅋ

익명 사용자의 이미지

If you want to go somewhere, goto is the best way to get there.
- Ken Thompson -

익명 사용자의 이미지

사실 그런 필요성은 매우 가끔 나오는 정도죠.

개인적으로 함수내에서 goto 문 한번 정도 쓰는게(한번 이상은 솔직히 필요가....) 복잡하게 if else 꼬아서 탈출하는 것보다 훨씬 보기 좋다고 생각합니다.

yducky의 이미지

보통 복잡한 case문(switch/if-else등)에서 공통 에러 처리 루틴으로 점프하게 할 때 많이 쓰지요.

제 경험상으로 말씀드리자면,
goto 문이라고 무조건 나쁜 것이 아닙니다.
backward goto가 나쁘고 forward goto는 상황에 따라서는 효율적입니다.

jeongheumjo의 이미지

잘 짜여진 코드에서는 필요 없는게 맞을 것 같습니다.
하지만 누군가가 중구난방 만들어놓은 코드에 새로운 로직을 구현해야 하는 경우,
그런데 기존의 코딩의 구조를 바꾸는게 힘든 경우(전체 코드의 다른 부분과의 스타일의 통일성을 유지하기 위해), 어쩔 수 없이 goto가 반드시 필요했던 경험이 있었습니다.
그런데 그 goto 사용때문에 상사분께 엄청 혼났던..., 실컷 혼나고 나서 아무리 봐도 goto 밖에 답이 없어서 상사분께 그렇게 말씀드렸더니 하시는 말씀,

"그렇구나"

익명 사용자의 이미지

goto 를 써서 코드가 더 간결해지고, 읽기 쉬워진다면 쓰는게 맞습니다.
제 경험에 의하면, C/C++에서는 딱 두 가지 경우에 goto를 쓰는게 더 간결한 코드를 만들더군요.

1. error 처리를 하면서 resource 를 release할 때에.. (메모리 반환, 파일 닫기 등)
2. 다중 loop을 한꺼번에 빠져나오는 경우.

이 이외에는 goto를 써서 더 나은 경우를 아직까지는 못봤네요.

semmal의 이미지

goto가 악이 아니라고 생각하기는 하지만, 가능한한 goto는 없애려고 노력합니다.
저같은 경우에는 리소스release나 다중loop탈출의 경우에도 가능한한 해당 기능을 함수로 분리해서 쓰려고 합니다.
개인적으로는 어느정도 중복을 허용하거나 return을 활용하는게, goto를 쓰는 것보다는 더 깔끔해보인다고 생각합니다.

------------------------------
How many legs does a dog have?

jeongheumjo의 이미지

윈도우즈에서는 __try / __finally 용법으로 goto 없이 원하는 바를 이룰 수 있습니다.
윈도우즈 API에서 마음에 드는 한가지..

익명 사용자의 이미지

예외처리할때
goto 사용합니다.
함수 제일 하단에 놓고
리소스 해제용도로 사용합니다.

명시적으로 goto 를 넣지는 않고
매크로에다 넣어서 사용하고 있네요.

댓글 달기

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