Purpose |
Invoke a subroutine. |
Syntax |
GOSUB {label | linenumber} GOSUB DWORD dwpointer |
Remarks |
GOSUB causes execution to branch to the statement prefaced by label or linenumber, after first saving its current location on the stack. The label or linenumber must be local to the Sub or Function where the GOSUB statement is located. Executing a RETURN statement returns control to the instruction immediately following the GOSUB. When using GOSUB, be sure that each subroutine returns to its caller gracefully through a RETURN statement. Run-away (recursive) GOSUBs that loop upon themselves will eat up large chunks of stack space, reducing available memory. All labels and line numbers are private. You cannot GOSUB to a label outside of the current Sub or Function. For time critical or high-performance code, using a GOSUB to perform a repetitive task is almost always faster then performing a call to a Sub or Function, since there is no overhead in setting up a stack frame for a GOSUB. |
DWORD |
GOSUB DWORD causes execution to branch to address stored in dwpointer, after first saving its current location on the stack. dwpointer must be a Double word, Long integer, or Pointer variable that contains the address of a label that is in the same Sub or Function as the GOSUB DWORD statement. Executing a RETURN statement returns control to the instruction immediately following the GOSUB DWORD statement. |
See also |
#STACK, FUNCTION/END FUNCTION, ON GOSUB, SUB/END SUB, RETURN |
Example |
FUNCTION DoCalc!(Radius!) pi# = ATN(1) * 4 ' calculate value of PI GOSUB CalcArea ' jump to subroutine Radius! EXIT FUNCTION
CalcArea: FUNCTION = pi# * Radius! ^2 ' calculate area RETURN ' return from subroutine END FUNCTION |