goto 문 - 위키백과, 우리 모두의 백과사전 goto 문 위키백과, 우리 모두의 백과사전. 둘러보기로 가기 검색하러 가기 goto 문은 여러 프로그래밍 언어에 등장하는 프로그램의 어느 부분에서 행번호나 레이블이 있는 다른 부분으로 건너뛸 때 사용하는 명령이다. 프로그램의 흐름을 바꾸는 기본적인 명령이며, 다른 흐름 제어문도 컴파일러가 goto 문과 비슷하게 바꾼다. goto 문은 포트란, 알골, 코볼, 스노볼, 베이직, 커먼 리스프, C, C, D, 파스칼, 펄, PHP7 등지에서 사용되며, 특히 어셈블리에서 많이 발견된다. 어셈블리어에서는 goto 대신에 BRA ( branch에서 유래 ), JMP, JUMP 등으로 쓰이기도 한다. 그러나 goto 문이 모든 고급언어에서 사용 가능한 것은 아니다. 예를 들어, 자바와 같은 언어에서 goto는 예약어이긴 하지만 아무 기능을 하지 않는다. 목차 1 비판 2 변형 3 읽을거리 4 각주 5 외부 링크 비판 [ 편집 ] 고급 언어에서 goto 문은 비판의 대상이 되어 왔는데, goto 문이 과도하게 사용되면 읽고 유지하기 힘든 스파게티 코드가 나오기 쉽기
로그인하지 않음토론기여계정 만들기로그인 이름공간 문서토론 변수 보기 읽기편집역사 보기 더 보기 검색 둘러보기 대문사용자 모임요즘 화제최근 문서 보기임의 문서로도움말기부 도구 여기를 가리키는 문서가리키는 글의 최근 올리기특수 문서 목록고유 링크문서 정보위키데이터 항목이 문서 인용하기 인쇄 / 내보내기 책 만들기PDF로 다운로드인쇄용 판 다른 언어 日 本 語 / / 中 文 링크 편집 이 문서는 2018년 12월 6일 ( 목 ) 15 : 37에 마지막으로 편집되었습니다. 모든 문서는 크리에이티브 커먼즈 저작자표시 - 동일조건변경허락 3. 0에 따라 사용할 수 있으며, 추가적인 조건이 적용될 수 있습니다. 자세한 내용은 이용 약관을 참고하십시오. 미국 및 다른 국가에 등록되어 있는 Wikimedia Foundation, Inc. 소유의 등록 상표입니다. 개인정보 정책 위키백과 소개 면책 조항 개발자 쿠키 정책 모바일 보기
##도 한다. 컨티뉴에이션 ( continuation ) : 프로그램의 임의의 위치에서 기억했던 위치로 분기하는 점에서 계산된 goto 문과 비슷하다. 그러나 이어하기는 현재 함수를 벗어날 수 있지만 goto 문은 그렇지 않기 때문에 이어하기가 더 유연하다. 이어하기를 실행하면 보통 분기하는 것뿐만 아니라 보통 프로그램의 호출 스택을 조절하는 것까지 한다. 베이직 언어를 패러디한 인터칼과 같은 언어에서는 COME FROM 문을 goto 문 대신에 쓰기도 한다. 펄과 같은 언어에서는 있는 현재 인자를 사용하여 서브루틴을 호출하는 방법으로 goto 문을 사용한다. 읽을거리 [ 편집 ] 항해형 데이터베이스 각주 [ 편집 ] ↑ 데니스 리치 ; 브라이언 커니핸 ( 1998 ). 《 C 언어 프로그래밍 》 2판. 대영사. 91쪽. ISBN 89 - 7163 - 026 - 4. ↑ ( 영어 ) 에츠허르 데이크스트라 : Go To Statement Considered Harmful Archived 2007년 7월 3일 - 웨이백 머신. Communications of the ACM 11 : 3 ( 1968 ), 147 - 148. ↑ ( 영어 ) 도널드 커누스 : Structured Programming with Goto Statements. Computing Surveys 6
( 영어 ) 도널드 커누스 : Structured Programming with Goto Statements. Computing Surveys 6 : 4 ( 1974 ), 261 - 301. 외부 링크 [ 편집 ] ( 영어 ) A Structured Discipline of Programming vdeh프로그래밍 구성체변수 전역 변수 지역 변수 정적 변수 매개 변수 상수 포인터 변수 레퍼런스 ( 참조자 ) 레지스터 변수 lvalue rvalue 자료형 정수 부동소수점수 고정소수점수 복소수 문자열 불린 자료형 unsigned 배열 구조체 공용체 typedef 선언 형 변환 제어 분기문 if - else 구조 switch 문 goto 문 반복문 while 루프 do - while 루프 for 루프 foreach 루프 함수 x86 호출 규약 ( stdcall, cdecl ) inline 함수 다중 정의 가변 인자 함수 객체 지향적 문법 클래스 ( 멤버 변수 · 멤버 함수 ) 상속 연산자 오버로딩 템플릿 접근 권한 이름공간 예외 처리 인터페이스 기타 매크로 헤더 파일 모듈화 비트 연산 라이브러리 연산자 원본 주소 " " 분류 : 제어 흐름에츠허르 데이크스트라숨은 분류 : 영어 표기를 포함한 문서 둘러보기 메뉴 개인 도구 로그인하지 않음토론기여계정 만들기로그인 이름공간 문서토론 변수 보기 읽기편집역사 보
##to 문을 사용한 구조적 프로그래밍'[ 3 ] 에서는 goto의 적절한 위치를 고찰한다. 일반적으로 이것들은 특정 프로그래밍 구조가 없기 때문이다. 이런 경우들에서 goto 문은 항상 원하는 구조를 에뮬레이트 할 수 있고, 따라서 이것이 프로그래밍의 기본적인 요소의 하나라는 것이다. 다른 해법은 매크로를 이용하여 원하는 제어 구조를 만드는 것이다. ( 리스프와 그 변종이나 포스에서는 이렇게 해서 대부분의 일을 할 수 있다. ) 변형 [ 편집 ] 계산된 goto 문 ( Computed GOTO ) : 수식의 값에 따라 몇 군데의 레이블로 분기하거나, 변수에 저장되어 있는 레이블로 분기한다. 계산된 goto 문은 보통 goto 문보다 문제가 더 심각한데, 프로그래머가 어떤 구문을 본다고 해도 다음에 무엇이 수행될지 알 수 없기 때문이다. 베이직의 ON goto 문은 전자의 계산된 goto 문을 지원하며, 각각의 사례별로 분기에 유용하다. C에서는 Switch 문을 지원한다. 어떤 C 컴파일러들은 레이블 변수에 따라 분기하는 goto 문을 제공하기도 한다. 컨티뉴에이션 ( continuation ) : 프로그램의 임의의 위치에서 기억했던 위치로 분기하는 점
대상이 되어 왔는데, goto 문이 과도하게 사용되면 읽고 유지하기 힘든 스파게티 코드가 나오기 쉽기 때문이다. 구조적 프로그래밍은 1960년대와 1970년대에 더 두드러졌는데, 많은 컴퓨터 과학자들의 결론은 프로그램이 항상 goto 문 대신 일명'구조적'인 흐름 제어문 ( 순환문, if - then - else문 ) 을 사용해야 한다는 것이다. [ 1 ] 그러나 goto 문의 사용이 종종 나쁜 습관이긴 하지만, 많은 프로그래밍 언어에서 goto 문을 사용하지 않고는 간단히 되지 않는 경우 ( 중첩 순환문을 빠져나갈 때나 예외 처리할 때 ) 가 있다고 주장하는 사람들이 있다. goto 문에 대한 한 가지 유명한 비판은 1968년에 에츠허르 데이크스트라의'goto 문의 해로움'[ 2 ] 이라는 서신이다. 이 서신에서 데이크스트라는 더 높은 수준의 언어에서는 goto 문을 제한하지 않으면 안된다고 했는데, 이것은 프로그램의 정확성을 분석하고 증명하는 것을 ( 특히 순환문을 포함해서 ) 어렵게 하기 때문이라고 했다. 도널드 커누스의'goto 문을 사용한 구조적 프로그래밍'[ 3 ] 에서는 goto의 적절한 위치를 고찰한다. 일반적으로 이것들
goto 문은 여러 프로그래밍 언어에 등장하는 프로그램의 어느 부분에서 행번호나 레이블이 있는 다른 부분으로 건너뛸 때(one-way transfer) 사용하는 명령이다. 프로그램의 흐름을 바꾸는 기본적인 명령이며, 다른 흐름 제어문도 컴파일러가 goto 문과 비슷하게 바꾼다. goto 문은 포트란, 알골, 코볼, 스노볼, 베이직, 커먼 리스프, C, C, D, 파스칼, 펄, PHP7 등지에서 사용되며, 특히 어셈블리에서 많이 발견된다. 어셈블리어에서는 goto 대신에 BRA(branch에서 유래), JMP, JUMP 등으로 쓰이기도 한다. 그러나 goto 문이 모든 고급언어에서 사용 가능한 것은 아니다. 예를 들어, 자바와 같은 언어에서 goto는 예약어이긴 하지만 아무 기능을 하지 않는다.