{{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"}}