CALL
From QB64 Wiki
CALL sends code execution to a subroutine procedure in a program. In QB64 the subroutine doesn't need to be declared.
- 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: