{{fbdoc item="title" value="COMMON"}}----
Variable declaration and scope modifier

{{fbdoc item="syntax"}}##
	**Common** [[[KeyPgShared Shared]]] //symbolname//[()] [AS [[DataType DataType]]] [, ...]
##
{{fbdoc item="desc"}}
	Declares a variable which is shared between code modules. A matching ##**Common**## statement must appear in all other code modules using the variable. 

	The ##**Shared**## optional parameter makes the variable global so that it can be used inside ##[[KeyPgSub sub]]##s and ##[[KeyPgFunction function]]##s, as well as at module level. ##**Common**## arrays are always variable-length, and must be defined with an empty parameter list ##()##, and its dimensions set in a later ##[[KeyPgDim Dim]]## or ##[[KeyPgRedim Redim]]## statement.

{{fbdoc item="ex"}}
{{fbdoc item="filename" value="examples/manual/module/common1.bas"}}%%(freebasic)
'' common1.bas

Declare Sub initme()

Common Shared foo() As Double

Redim foo(0 To 2) As Double

initme()

Print foo(0), foo(1), foo(2)
%%

{{fbdoc item="filename" value="examples/manual/module/common2.bas"}}%%(freebasic)
'' common2.bas

Common Shared foo() As Double

Sub initme()
  foo(0) = 4*Atn(1)
  foo(1) = foo(0)/3
  foo(2) = foo(1)*2
End Sub
%%
Output:
%%
 3.141592653589793           1.047197551196598           2.094395102393195
%%

{{fbdoc item="diff"}}
	- The arrays will be always variable-length.
	- ##//blockname//## is not needed and must be removed because the order of declaration no longer matters, only the symbol names.

{{fbdoc item="see"}}
	- ##[[KeyPgDim Dim]]##
	- ##[[KeyPgErase Erase]]##
	- ##[[KeyPgExtern Extern]]##
	- ##[[KeyPgLbound Lbound]]##
	- ##[[KeyPgRedim Redim]]##
	- ##[[KeyPgPreserve Preserve]]##
	- ##[[KeyPgShared Shared]]##
	- ##[[KeyPgStatic Static]]##
	- ##[[KeyPgUbound Ubound]]##
	- ##[[KeyPgVar Var]]##

{{fbdoc item="back" value="CatPgModularizing|Modularizing"}}