{{KW|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|parameters}}, {{Parameter|passed}},...''')'''] ''Non-call Syntax:'' ::: '''{{Parameter|ProcedureName}}''' [{{Parameter|parameters}}, {{Parameter|passed}},...] * CALL requires that {{KW|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 [[DECLARE]]d. ''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. :''Note:'' CALL doesn't need to be used in order to call a subroutine. Just using the name of the sub with parameters and no brackets will do: '''{{text|helloworld a|green}}''' {{PageSeeAlso}} * [[SUB]], [[FUNCTION]] * [[DECLARE]], [[DECLARE (non-BASIC statement)]] {{PageNavigation}}