mirror of
https://github.com/QB64Official/qb64.git
synced 2024-08-31 06:30:18 +00:00
64 lines
No EOL
3 KiB
Text
64 lines
No EOL
3 KiB
Text
[[CALL]] sends code execution to a subroutine procedure in a program. In '''QB64''' the subroutine doesn't need to be declared.
|
|
|
|
|
|
{{PageSyntax}}
|
|
: [[CALL]] {{Parameter|ProcedureName}} ({{Parameter|parameter1}}, {{Parameter|parameter2}},...)]
|
|
|
|
===Alternative syntax===
|
|
: {{Parameter|ProcedureName}} {{Parameter|parameter1}}, {{Parameter|parameter2}},...]
|
|
|
|
|
|
* CALL requires [[SUB]] program parameters to 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 parameters by value, instead of by reference, enclose passed variables in parenthesis.
|
|
|
|
|
|
==QBasic/QuickBASIC==
|
|
* PDS or Quickbasic 7 up could use [[BYVAL]] to pass variables by values instead of reference.
|
|
* QuickBASIC 4.5 could use [[BYVAL]] only for procedures created in Assembly or another language.
|
|
* QBasic required [[CALL ABSOLUTE]] only. It did not have to be [[DECLARE]]d.
|
|
|
|
|
|
{{PageExamples}}
|
|
''Example:'' How parameters are passed in two [[SUB]] calls, one with CALL using brackets and one without CALL or brackets:
|
|
{{CodeStart}} '' ''
|
|
{{Cl|DIM}} a {{Cl|AS}} {{Cl|INTEGER}} 'value not shared with SUB
|
|
{{Cl|DIM}} {{Cl|SHARED}} b {{Cl|AS}} {{Cl|INTEGER}} 'value shared with any SUB
|
|
a = 1
|
|
b = 2
|
|
c = 3
|
|
|
|
{{Cl|CALL}} helloworld (a) 'a passed to c parameter with CALL
|
|
helloworld a 'a passed to c parameter w/o CALL
|
|
|
|
{{Cl|END}}
|
|
|
|
{{Cl|SUB}} helloworld (c) 'SUB parameter variables are always inside of brackets in SUB code
|
|
{{Cl|PRINT}} "Hello World!"
|
|
{{Cl|PRINT}} a, b, c
|
|
a = a + 1 'a is a SUB value of 0 when printed which may increase inside SUB only
|
|
b = b + 1 'b is a shared value which can increase anywhere
|
|
c = c + 1 'c is a SUB parameter value from a in calls which may increase inside SUB only
|
|
{{Cl|END SUB}} '' ''
|
|
{{CodeEnd}}
|
|
|
|
''Returns:''
|
|
{{OutputStart}}Hello World!
|
|
0 2 1
|
|
Hello World!
|
|
0 3 1
|
|
{{OutputEnd}}
|
|
: ''Explanation:'' Variable '''{{Parameter|a}}''' that is outside of the subroutine isn't [[SHARED]] so it will have no effect inside the subroutine, the variable {{Parameter|a}} inside the subroutine is only valid inside the subroutine, and whatever value {{Parameter|a}} has outside of it makes no difference within the subroutine.
|
|
|
|
:The variable '''{{Parameter|b}}''' on the other hand is [[SHARED]] with the subroutines and thus can be changed in the subroutine. The variable {{Parameter|a}} is initiated with 0 as default when created, thus it will return 0 since it wasn't changed within the subroutine.
|
|
|
|
:The variable '''{{Parameter|c}}''' is the [[SUB]] parameter variable that passes values into the sub. Its value could be changed by the passed parameter value or inside of the subroutine. The un-shared '''{{Parameter|c}}''' variable value outside of the sub is irrelevant within the subroutine.
|
|
|
|
|
|
{{PageSeeAlso}}
|
|
* [[SUB]], [[FUNCTION]]
|
|
* [[DECLARE]], [[DECLARE (non-BASIC statement)]]
|
|
|
|
|
|
{{PageNavigation}} |