이러한 코드에서 goto문을 쓰는게 나을까요?

gurumong의 이미지

기존 데이터에 포함되지 않는 어떤 유니크한 값을 만들어야하는데요

안쪽 첫번째 for문에서 유니크값을 포함하는 값이 존재하면
외각 while문을 새로 돌아 새로운 유니크값을 만들어야하는데
break는 안쪽 for문만을 빠져나갈뿐이잖아요

그래서 계속해서 두번째 for문을 돌게 될텐데
두번째 for문 이전에 if문을 추가해서 isMacth==true 이면 break 문을 또 한번 실행하도록 하려니
코드가 이쁜거 같지 않은데요

이럴때 goto문을 쓰는게 좋을까요?

do {
	value = ?;//mackValue
 
	for()
	{
		//isMacth?
	}
 
	for()
	{
		//isMacth?
	}
 
}while (isMacth != true);
klyx의 이미지

충분히 흐름을 따라가기 쉽다면 상관없을듯합니다.

tj의 이미지

코드 읽으면서 머리가 비비 꼬일 정도가 아니면 괜찮아요. goto 안쓴다고 읽기 좋은 코드가 되는 것도 아닌걸요.

불편한웹의 이미지

1. 재귀적 방법

func(flag)
{
    if (flag == true)
    {
        // for로 체크하던 것을 이곳에 써주면 됩니다.
        // 두번째 for는 어떤 용도인지 질문에 나와있지 않아서 모르기 때문에 패스^^
        return func(flag)
    }
    else // flag == false
    {
        // do something
        return unique_value
    }
}

2. 중지연산 이용하는 방법

int gen_unique_key()
{
    // check1() == NOT_PASSED 이면 check2()는 실행되지 않고 while 루프 돌아감.
    // check1() != NOT_PASSED 이면 check2() 실행됨. check2() != NOT_PASSED 이면 while 문 빠져나감.
    while(check1() == NOT_PASSED || check2() == NOT_PASSED)
    ;
}
 
int check1() { /* 첫번째 for 문에 넣던 체크코드 */ }
int check2() { /* 두번째 for 문에 넣던 체크코드 */ }
clique의 이미지

c에서 forward goto는 그리 나쁘지 않은 선택입니다.(backward goto는 지양하시는 게 좋을듯 하고요)

code complete에도 나오는 내용입니다만... if statement를 모두 넣거나, goto를 쓰거나, return을 잘 쓰거나, if를 지나치게 중첩하거나 정도의 방법이 있었던거 같네요. (주로 자원의 회수와 관련되어 있지만요)

sev314의 이미지

그런데 앞·뒤(forward/backward) 방향이 헷갈리는데

소스 코드 위로 가는 게 forward인가요 backward인가요?

clique의 이미지

저는 소스 코드 상에서 위로 가는 걸 backward라고 생각하고 있습니다.(플로우 상 뒤쪽으로 가는 거죠)

댓글 달기

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