{{위키데이터 속성 추적}}
[[컴퓨터 프로그래밍]]에서 '''return 문'''은 현재의 [[함수 (프로그래밍)|함수]]에서 값이나 주소를 반환할 때 사용한다. return 문은 실행이 현재 서브루틴을 떠나 서브루틴을 호출한 명령어 바로 뒤의 코드 지점(반환 주소)에서 다시 시작되도록 한다. 반환 주소는 호출 루틴에 의해 저장되며, 오늘날 일반적으로 프로세스의 호출 스택이나 레지스터에 저장된다. 많은 프로그래밍 언어의 return 문을 사용하면 함수가 함수를 호출한 코드로 다시 전달될 반환 값을 지정할 수 있다.

== 개요 ==
C와 C++에서는 return exp;(여기서 exp는 표현식)은 호출 함수에 프로그램 실행을 반환하고 exp 값을 보고하도록 함수에 지시하는 명령문이다. 함수의 반환 유형이 void인 경우 return 문은 값 없이 사용될 수 있으며, 이 경우 프로그램은 현재 함수에서 벗어나 호출 함수로 돌아간다. [[모듈라-2]] 및 [[파이썬]]을 포함한 다른 언어에서도 유사한 구문이 사용된다.

[[파스칼 (프로그래밍 언어)]]에는 return 문이 없다. 함수나 프로시저는 마지막 문에 도달하면 자동으로 반환된다. 함수의 반환 값은 함수와 동일한 이름을 가진 식별자에 할당하여 함수 내에서 제공된다. 그러나 일부 파스칼 버전은 특수 기능인 Exit(exp);를 제공한다. 함수에서 즉시 값을 반환하거나 매개 변수 없이 프로시저에서 즉시 반환하는 데 사용할 수 있다.

파스칼과 마찬가지로 [[포트란|FORTRAN II]], Fortran 66, Fortran 77 및 이후 버전의 포트란은 함수 이름에 할당하여 반환 값을 지정하지만 return 문도 있다. 해당 명령문은 반환 값을 지정하지 않으며 함수의 경우 함수 이름에 할당된 값이 반환되도록 한다.

일부 다른 언어에서는 기능 식별자 대신 사용자 정의 출력 매개변수가 사용된다.

[[오베론 (프로그래밍 언어)]](Oberon-07)에는 return 문 대신 return 절이 있다. return 절은 프로시저 본문의 마지막 문 뒤에 배치된다.

[[리스프]], [[펄]] 및 [[루비 (프로그래밍 언어)]]와 같은 일부 표현식 지향 프로그래밍 언어에서는 프로그래머가 명시적인 return 문을 생략하고 대신 마지막으로 평가된 표현식이 서브루틴의 반환 값임을 지정하는 것을 허용한다. 다른 경우에는 명시적인 return 문이 없으면 Null 값이 반환된다. 파이썬에서는 return 문이 생략되면 None 값이 반환되는 반면, [[자바스크립트]]에서는 정의되지 않은 값이 반환된다.

[[파워셸]]에서는 캡처되지 않은 모든 평가된 식(예: 변수에 할당, void로 캐스팅 또는 $null로 파이프)은 서브루틴에서 배열의 요소로 반환되거나 개체가 하나만 있는 경우 단일 개체로 반환된다.

[[펄]]에서 서브루틴의 반환 값은 호출된 컨텍스트에 따라 달라질 수 있다. 가장 근본적인 차이점은 호출 코드가 하나의 값을 기대하는 스칼라 컨텍스트, 호출 코드가 값 목록을 기대하는 목록 컨텍스트, 호출 코드가 반환 값을 전혀 기대하지 않는 void 컨텍스트이다. 서브루틴은 wantarray 함수를 사용하여 컨텍스트를 확인할 수 있다. 인수 없는 반환의 특수 구문은 스칼라 컨텍스트에서 정의되지 않은 값을 반환하고 목록 컨텍스트에서 빈 목록을 반환하는 데 사용된다. 스칼라 컨텍스트는 부울, 숫자, 문자열 및 다양한 참조 유형 컨텍스트로 더 나눌 수 있다. 또한 상황에 맞는 반환 시퀀스를 사용하여 스칼라 값을 지연 평가하여 상황에 맞는 개체를 반환할 수 있다.

많은 운영 체제에서는 프로세스가 종료될 때 프로그램이 결과(일반 [[표준 스트림|출력]]과 별도로)를 반환하도록 허용한다. 이러한 값은 종료 상태를 참조한다. 이러한 방식으로 전달될 수 있는 정보의 양은 상당히 제한되어 있으며 실제로는 성공 또는 실패 신호로 제한되는 경우가 많다. 프로그램 내에서 이 반환은 일반적으로 Exit(시스템 호출)을 호출하여 수행된다(주 함수에서 반환하는 대체 메커니즘을 사용할 수 있는 C에서도 일반적임).

== 문법 ==
return 문은 다양한 형태로 나타난다. 다음 구문이 가장 일반적이다.

{| class="wikitable" border="1"
|-
! 언어
! Return 문
|-
| [[에이다 (프로그래밍 언어)|에이다]], [[배시 (유닉스 셸)|Bash]],<ref>in Bash, only integers in the range 0-255 may be returned: http://tldp.org/LDP/abs/html/complexfunct.html#RETURNREF</ref> [[C (프로그래밍 언어)|C]], [[C++]], [[자바 (프로그래밍 언어)|자바]], [[PHP]], [[C 샤프|C#]], [[자바스크립트]], [[D (프로그래밍 언어)|D]]
| <syntaxhighlight lang="c">return value;</syntaxhighlight>
|-
| [[베이직]]
| <syntaxhighlight lang="qbasic">RETURN</syntaxhighlight>
|-
| [[리스프]]
| <syntaxhighlight lang="lisp">(return value)</syntaxhighlight>
|-
| [[펄]], [[루비 (프로그래밍 언어)|루비]]
| <syntaxhighlight lang="perl">return @values;
return $value;
return;</syntaxhighlight>
또는 컨텍스트 반환 시퀀스
|-
| [[파이썬]]
| <syntaxhighlight lang="python">return value</syntaxhighlight>
|-
| [[스몰토크]]
| <syntaxhighlight lang="smalltalk">^ value</syntaxhighlight>
|-
| [[비주얼 베이직 닷넷]]
| <syntaxhighlight lang="vbnet">Return value</syntaxhighlight>
|-
| [[윈도우 파워셸]]
| <syntaxhighlight lang="c">return value;</syntaxhighlight>
|-
| [[x86 어셈블리]]
| <syntaxhighlight lang="asm">ret</syntaxhighlight>
|}

[[MOS 6502|MOS 테크놀로지 6502]]와 같은 일부 [[어셈블리어]]에서는 니모닉 "RTS"(ReTurn from Subroutine)가 사용된다.

== 같이 보기 ==
* [[종료 상태]]

== 각주 ==
{{각주}}

[[분류:제어 흐름]]
[[분류:함수 (프로그래밍)]]