{{fbdoc item="title" value="ON...GOSUB"}}----
Calls a label based on an expression

{{fbdoc item="syntax"}}##
	**On** //expression// **Gosub** //label1//[, ...]
##
{{fbdoc item="desc"}}
	Branches to different labels depending on the value of //expression//. An expression value of 1 will branch to the first label, a value of 2 to the second, etc.  If the value of //expression// is zero (0) or greater than the number of items in the list, execution continues on the next statement following the ##**On...Gosub**##.
	
	This statement behaves exactly like ##[[KeyPgGosub|Gosub]]## and execution may return to the statement following the ##**On...Gosub**## using ##[[KeyPgReturnGosub|Return]]##.
	
	It is recommended that the structured ##[[KeyPgSelectcase|Select Case]]## conditional statement be used instead of ##**On...Gosub**##.

{{fbdoc item="ex"}}
{{fbdoc item="filename" value="examples/manual/control/ongosub.bas"}}%%(freebasic)
'' Compile with -lang qb

'$lang: "qb"

choice = 3
On choice GoSub labela, labelb, labelc
Print "Good bye."
End

labela:
Print "choice a"
Return

labelb:
Print "choice b"
Return

labelc:
Print "choice c"
Return
%%

{{fbdoc item="lang"}}
	- Only available in the //[[CompilerOptlang|-lang qb]]// and //[[CompilerOptlang|-lang fblite]]// dialects.
	- ##**On Gosub**## support is disabled by default in the //[[CompilerOptlang|-lang fblite]]// unless the ##[[KeyPgOptiongosub|Option Gosub]]## statement is used.

{{fbdoc item="diff"}}
	- FreeBASIC does not generate a run-time error if ##//expression//## is negative or greater than 255.

{{fbdoc item="see"}}
	- ##[[KeyPgSelectcase|Select Case]]##
	- ##[[KeyPgOngoto|On...Goto]]##
	- ##[[KeyPgGosub|Gosub]]##
	- ##[[KeyPgReturnGosub|Return (from Gosub)]]##
	- ##[[KeyPgOptiongosub|Option Gosub]]##
	- ##[[ProPgLabels|Labels]]##

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