{{fbdoc item="title" value="RETURN"}}----
Control flow statement to return from a procedure or ##[[KeyPgGosub|Gosub]]##.

{{fbdoc item="syntax"}}##
	**Return** //expression//
//or//
	**Return** [ //label// ]
##
{{fbdoc item="desc"}}
	##**Return**## is used to return from a procedure or return from a gosub ##[[KeyPgGosub|Gosub]]##.
	
	Because ##[[KeyPgReturn|Return]]## could mean return-from-gosub or return-from-procedure, ##[[KeyPgOptiongosub|Option Gosub]]## and ##[[KeyPgOptionnogosub|Option Nogosub]]## can be used to enable and disable ##[[KeyPgGosub|Gosub]]## support.  When ##[[KeyPgGosub|Gosub]]## support is disabled, ##[[KeyPgReturn|Return]]## is then recognized as return-from-procedure.  When ##[[KeyPgGosub|Gosub]]## support is enabled, ##[[KeyPgReturn|Return]]## is then recognized as return-from-gosub.
	
	##**Return**## (from procedure) is used inside a procedure to exit the procedure possibly with a return value:
		- A ##[[KeyPgSub|Sub]]## cannot specify a return return value. ##**Return**## is roughly equivalent to the ##[[KeyPgExit|Exit]] Sub## idiom.
		- In a ##[[KeyPgFunction|Function]]##, ##**Return**## must specify its return value.  ##**Return** //expression//## is roughly equivalent to the ##Function = //expression// : [[KeyPgExit|Exit]] Function## idiom.

		
	##**Return**## (from gosub) is used to return control back to the statement immediately following a previous ##[[KeyPgGosub|Gosub]]## call. When used in combination with ##[[KeyPgGosub|Gosub]]##, no return value can be specified.  If the optional ##//label//## is specified, execution continues at the specified label.  If no ##[[KeyPgGosub|Gosub]]## was made, a runtime error is generated, and execution continues immediately after ##**Return**##.
	
	A ##[[KeyPgGosub|Gosub]]## should always have a matching ##**Return**## statement.  However, if ##**Return**## (from gosub) is used where no ##[[KeyPgGosub|Gosub]]## was made, a run-time error is generated.

{{fbdoc item="ex"}}
{{fbdoc item="filename" value="examples/manual/control/return.bas"}}%%(freebasic)
'' GOSUB & RETURN example, compile with "-lang qb" or use "$lang" as below

'$lang: "qb"

Print "Let's Gosub!"
GoSub MyGosub
Print "Back from Gosub!"
Sleep
End

MyGosub:
Print "In Gosub!"
Return
%%

{{fbdoc item="filename" value="examples/manual/control/return2.bas"}}%%(freebasic)
'' Return from function

type rational              '' simple rational number type
	numerator as integer
	denominator as integer
end type

'' multiplies two rational types
function rational_multiply( r1 as rational, r2 as rational ) as rational

	dim r as rational
	'' multiply the divisors ...
	r.numerator   = r1.numerator   * r2.numerator
	r.denominator = r1.denominator * r2.denominator

	'' ... and return the result
	return r

end function

dim as rational r1 = ( 6, 105 )   '' define some rationals r1 and r2
dim as rational r2 = ( 70, 4 )
dim as rational r3

r3 = rational_multiply( r1, r2 )  '' multiply and store the result in r3

'' display the expression
print r1.numerator & "/" & r1.denominator; " * ";
print r2.numerator & "/" & r2.denominator; " = ";
print r3.numerator & "/" & r3.denominator%%

{{fbdoc item="lang"}}
	- In the //[[CompilerOptlang|-lang fb]]// dialect ##**Return**## always means return-from-procedure.
	- In the //[[CompilerOptlang|-lang qb]]// dialect, ##**Return**## means return-from-gosub by default unless changed with ##[[KeyPgOptionnogosub|Option Nogosub]]##, in which case the compiler will recognize ##**Return**## as return-from-procedure.
	- In the //[[CompilerOptlang|-lang fblite]]// dialect, ##**Return**## means return-from-procedure by default unless changed with ##[[KeyPgOptiongosub|Option Gosub]]##, in which case the compiler will recognize ##**Return**## as return-from-gosub.

{{fbdoc item="diff"}}
	- None when using the //[[CompilerOptlang|-lang qb]]// dialect.

{{fbdoc item="see"}}
	- ##[[KeyPgSub|Sub]]##
	- ##[[KeyPgFunction|Function]]##
	- ##[[KeyPgGosub|Gosub]]##
	- ##[[KeyPgOptiongosub|Option Gosub]]##
	- ##[[KeyPgOptionnogosub|Option Nogosub]]##
	- ##[[ProPgLabels|Labels]]##

{{fbdoc item="back" value="CatPgControlFlow|Control Flow"}}
