CALL - QB64 Wiki

CALL

From QB64 Wiki

Jump to: navigation, search

CALL sends code execution to a subroutine procedure in a program. In QB64 the subroutine doesn't need to be declared.


Syntax:

CALL ProcedureName [(parameters, passed,...)]


Non-call Syntax:

ProcedureName [parameters, passed,...]


  • CALL requires that SUB program parameters be enclosed in brackets(parenthesis).
  • CALL is NOT required to call a subprocedure. Use the SUB-procedure name and list any parameters without parenthesis.
  • Neither syntax can be used to call GOSUB linelabel sub procedures.
  • To pass by values, both syntaxes require that each of those variable names be enclosed in parenthesis.
  • PDS or Quickbasic 7 up can use BYVAL to pass by values instead of reference.
  • Quickbasic 4.5 can use BYVAL only for procedures created in Assembly or another language.
  • Qbasic requires CALL ABSOLUTE only. It does not have to be DECLAREd.


Example:

DIM a AS INTEGER DIM SHARED b AS INTEGER a = 1 b = 1 CALL helloworld CALL helloworld SUB helloworld PRINT "Hello World!" PRINT a PRINT b a = a + 1 b = b + 1 END SUB

Returns:

Hello World! 0 1 Hello World! 0 2

Explanation: When the subroutine is CALLed the code inside the subroutine is executed until it reaches the END SUB statement or an EXIT SUB statement. Since the variable a that is outside of the subroutine isn't SHARED it will have no effect in the subroutine, the variable a inside the subroutine is only valid inside the subroutine, and whatever value a has outside of it makes no difference within the subroutine.
The variable b on the other hand is SHARED with the subroutines and thus can be changed in the subroutine. The variable a is initiated with 0 as default when created, thus it will return 0 since it wasn't changed within the subroutine.
Note: CALL doesn't need to be used in order to call a subroutine. Adding the name of the sub to the code like this will do:
helloworld
Also; note that the variable a outside of the subroutine is different from the variable a inside the subroutine since a isn't SHARED through subroutines, variable b on the other hand is SHARED through subroutines and thus is the same within the subroutine as outside of it.


See also:



Navigation:
Go to Keyword Reference - Alphabetical
Go to Keyword Reference - By usage
Go to Main WIKI Page